C#定時任務框架Quartz.NET


什么是定時任務?

最近恰巧有類似的需求, 需要做一個應用程序服務, 每天定時給服務器上傳采集的數據。
在沒有任務框架的使用前提下, 如果我們想要實現類似的需求,可以自己寫一個計時器, 然后24小時運行,達到指定的時間就運行。但是這樣不僅擴展性差, 而且不易於維護。
在定時任務這塊, 也有非常的多的框架支持,開箱即用, 那么下面將主要介紹一下Quartz.NET框架
Github

Quartz.NET介紹

Quartz.NET是一個Github開源項目,用於創建一個免費商業用途的作業調度框架。
注:支持 .NET Core/.NET Standard 2.0 和 .NET 框架 4.6.1 及更晚版本。

Quartz.NET入門

在我們使用定時任務框架的之前, 首先我們需要確定的是, 它大概具備哪些內容。

  • 靈活的指定某項任務
  • 靈活的啟動時間配置
  • 傳遞參數並且監聽

了解了這些基礎概念之后, 我們便開始學習如何在Quartz.NET當中使用這些功能。

1.創建一個任務
任務是一個抽象的概念, 實際來說它應該指的是某種任務, 例如: 想要每3秒輸入一個字符串, 那么我們就可以這樣做。

  • 下面演示創建了一個類, 它繼承於IJob接口, 實現了Execute方法, 任務就是輸出一個字符串。
    public class TestJob : IJob
    {
        public async Task Execute(IJobExecutionContext context)
        {
            await Console.Out.WriteLineAsync($"{DateTime.Now}:Hello!");
        }
    }
  • 創建任務
            //創建一個工作
            IJobDetail job = JobBuilder.Create<TestJob>()
             .WithIdentity("TestJob", "Test")
            .Build();

2.配置任務的參數
為任務配置一個觸發條件及相關的參數。當該配置的參數一旦達到了條件, 上面的任務將被觸發。

            //創建一個觸發條件
            ITrigger trigger = TriggerBuilder.Create()
               .WithIdentity("TestJobTrigger", "Test")
               .WithSimpleSchedule(x =>
               {
                   x.WithIntervalInSeconds(3).RepeatForever();
               })
               .Build();

3.啟動任務
創建一個任務調度器, 將任務和配置參數添加到調度器當中。

            StdSchedulerFactory factory = new StdSchedulerFactory();
            //創建任務調度器
            IScheduler scheduler = await factory.GetScheduler();
            //啟動任務調度器
            scheduler.Start();  

            //將創建的任務和觸發器條件添加到創建的任務調度器當中
            scheduler.ScheduleJob(job, trigger);

4.實際效果
在上面的代碼中,我們創建了一個任務輸出一段字符串, 然后為該任務創建了一個配置, 每3秒執行一次, 那么實際效果會每間隔3秒輸出:

更多配置

  • 特定時間觸發,重復觸發,單次觸發, 觸發次數,開始時間, 結束時間。 這些在框架當中都有該功能

  • 觸發器表達式 ,例如: 每周一上午, 或每周一、周三、周五等等
    下面是一些表達式及其含義的示例
    示例 1 - 創建每 5 分鍾觸發一次的觸發器的表達式

"0 0/5 * * * ?"

示例 2 - 創建每 5 分鍾觸發一次的觸發器的表達式,在分鍾后 10 秒(即上午 10:00:10、上午 10:05:10 等)。

"10 0/5 * * * ?"

示例 3 - 用於創建觸發器的表達式,該觸發器在每個星期三和周五的 10:30、11:30、12:30 和 13:30 觸發。

"0 30 10-13 ? * WED,FRI"

示例 4 - 創建觸發器的表達式,在每月 5 日到 20 日上午 8 點到上午 10 點之間每半小時觸發一次。請注意,觸發器不會於上午 10:00 觸發,只是在 8:00、8:30、9:00 和 9:30

"0 0/30 8-9 5,20 * ?"

點擊查看更多觸發器表達式

  • 監聽器: 可以檢測你的任務執行狀態: 是否工作, 是否錯誤,是否已完成等

關於具體的使用方法, 在文檔中有詳細的介紹:
查看Quartz.NET文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM