Quartz是什麼?官網:http://www.quartz-scheduler.org
Quartz 是一個完全由 Java 編寫的開源作業調度框架,爲在 Java 應用程序中進行作業調度提供了簡單卻強大的機制。
Quartz 可以與 J2EE 與 J2SE 應用程序相結合也可以單獨使用。
Quartz 允許程序開發人員根據時間的間隔來調度作業。
Quartz 實現了作業和觸發器的多對多的關係,還能把多個作業與不同的觸發器關聯
Quartz.Net 是Quartz 的net實現 ,github:https://github.com/quartznet/quartznet
在項目的開發過程中,難免會遇見後需要後臺處理的任務,例如定時發送郵件通知、後臺處理耗時的數據處理等,這個時候你就需要Quartz.Net了。
Quartz.Net是純淨的,它是一個.Net程序集,是非常流行的Java作業調度系統Quartz的C#實現。
Quartz.Net一款功能齊全的任務調度系統,從小型應用到大型企業級系統都能適用。功能齊全體現在觸發器的多樣性上面,即支持簡單的定時器,也支持Cron表達式;即能執行重複的作業任務,也支持指定例外的日曆;任務也可以是多樣性的,只要繼承IJob接口即可。
對於小型應用,Quartz.Net可以集成到你的系統中,對於企業級系統,它提供了Routing支持,提供了Group來組織和管理任務,此外還有持久化、插件功能、負載均衡和故障遷移等滿足不同應用場景的需要。
實例:
打開vs2017新建一個core的控制檯項目,
檢查這個core版本是不是2.2,如果不是,可以去https://dotnet.microsoft.com/download/visual-studio-sdks?utm_source=getdotnetsdk&utm_medium=referral
我們先引用Quartz.Net 程序包:
來創建一個Job類HelloQuartzJob:
public class HelloQuartzJob : IJob { public Task Execute(IJobExecutionContext context) { return Task.Factory.StartNew(() => { Console.WriteLine("Hello Quartz.Net"); }); } }
然後在Program.cs裏面寫這個調度:
static async Task MainAsync() { var schedulerFactory = new StdSchedulerFactory(); var scheduler = await schedulerFactory.GetScheduler(); await scheduler.Start(); Console.WriteLine($"任務調度器已啓動"); //創建作業和觸發器 var jobDetail = JobBuilder.Create<HelloQuartzJob>().Build(); var trigger = TriggerBuilder.Create() .WithSimpleSchedule(m => { m.WithRepeatCount(3).WithIntervalInSeconds(1); }) .Build(); //添加調度 await scheduler.ScheduleJob(jobDetail, trigger); }
Main需要改一下
static async Task Main(string[] args) { Console.WriteLine("Hello World!"); await MainAsync(); Console.ReadKey(); }
這樣運行會報錯,打開項目屬性,生成,高級,修改語言版本爲c#7.1,或c#7.2,或c#7.3
修改之後,沒有錯誤,運行成功: