在 ASP.NET 中常見的排程框架不外乎 Quartz.NET 與 Hangfire 兩種,過去自己在開發上比較常用到 Hangfire 搭配其後台管理介面,在使用上可以說是相當方便與容易上手,最近在新專案也有遇到 schedule 的需求,同事大推 Quartz.Net 來擔任工作排程器的工作,Quartz.Net 是一套功能齊全的工作排程框架,由 Java 熱門的排程框架 Quartz 移植到 .NET 上,open source 且提供彈性的設定讓開發者使用,在新版 3.0.7 支援 .NET Core 2.1 版本,今天就來簡單介紹 Quartz.NET 的安裝與基本應用使用,若有問題或是錯誤的地方歡迎各位高手給予指導。
首先,先建立一個名稱為 QuartzNetConsole 的 Console 專案,接著開啟 Nuget Package Mnage 輸入 "quartz" 搜尋,安裝目前最新版的 Quartz.NET 套件
或是在 Nuget Package Console 輸入指令
如果有 Json 序列化需求,也可以一併加入 Quartz.Serialization.Json
- Install-Package Quartz
使用
在使用前先介紹 Quartz.Net 中的幾個重要 API 與 Interface

接著在 Console 專案 Program 啟動加入下列代碼
其中要執行的 ShowDataTimeJob 類別代碼如下
- class Program
- {
- static void Main(string[] args)
- {
- // trigger async evaluation
- RunProgram().GetAwaiter().GetResult();
- }
- private static async Task RunProgram()
- {
- try
- {
- // 建立 scheduler
- StdSchedulerFactory factory = new StdSchedulerFactory();
- IScheduler scheduler = await factory.GetScheduler();
- // 建立 Job
- IJobDetail job = JobBuilder.Create<ShowDataTimeJob>()
- .WithIdentity("job1", "group1")
- .Build();
- // 建立 Trigger,每秒跑一次
- ITrigger trigger = TriggerBuilder.Create()
- .WithIdentity("trigger1", "group1")
- .StartNow()
- .WithSimpleSchedule(x => x
- .WithIntervalInSeconds(1)
- .RepeatForever())
- .Build();
- // 加入 ScheduleJob 中
- await scheduler.ScheduleJob(job, trigger);
- // 啟動
- await scheduler.Start();
- // 執行 10 秒
- await Task.Delay(TimeSpan.FromSeconds(10));
- // say goodbye
- await scheduler.Shutdown();
- }
- catch (SchedulerException se)
- {
- await Console.Error.WriteLineAsync(se.ToString());
- }
- }
- }
程式說明
- internal class ShowDataTimeJob :IJob
- {
- public async Task Execute(IJobExecutionContext context)
- {
- await Console.Out.WriteLineAsync($"現在時間 {DateTime.Now}");
- }
- }
感想
以上透過簡單的說明與操作,就可以快速的 Demo 出 Quartz.NET 工作排程的功能,但其實在現實生活中代碼往往都不會那麼簡單,如果有興趣可以先參考官方網站的開發說明文件,日後如果遇到在分享給各位,Happy Coding :)
參考
ASP.NET 程式中的背景工作 (3) - 使用 Quartz.NET
Quartz.NET Quick Start Guide
有幸拜讀大學長的文章
回覆刪除