Quartz.NET是一個強大、開源、輕量的作業調度框架,你能夠用它來為執行一個作業而創建簡單的或復雜的作業調度。它有很多特征,如:數據庫支持,集群,插件,支持cron-like表達式等等。在2017年的最后一天Quartz.NET 3.0發布,正式支持了.NET Core 和async/await。這是一個大版本,有眾多新特性和大的功能
官網:http://www.quartz-scheduler.net/
源碼:https://github.com/quartznet/quartznet
示例:https://www.quartz-scheduler.net/documentation/quartz-3.x/quick-start.html
新功能
- 支持 async/await 基於任務的作業,內部以async/await工作
- 支持.NET Core / netstandard 2.0和.NET Framework 4.5.2及更高版本
- 通過提供程序名稱SQLite-Microsoft支持Microsoft.Data.Sqlite,舊的提供程序SQLite也仍然有效,還可以用
- 增加了對SQL Server內存優化表的初步支持和Quartz.Impl.AdoJobStore.UpdateLockRowSemaphoreMOT
- 從依賴關系中刪除Common.Logging
- 刪除C5 Collections,使用.NET框架內置的Collections
- 在插件啟動時添加對作業調度XML文件的驗證
- 在TimeZoneUtil中添加對額外自定義時區解析器功能的支持
API 不兼容
- 作業和插件分離到一個單獨的程序集/ NuGet包里 Quartz.Jobs和Quartz.Plugins
- ADO.NET提供程序名稱已經簡化,提供程序名稱不帶版本,例如SqlServer-20 => SqlServer
- API方法已經被重新定義,主要使用IReadOnlyCollection,這隱藏了兩個HashSets和List
- LibLog已經隱藏到內部(ILog等),就像它本來打算的那樣
- SimpleThreadPool 消失了,用系統的線程池取代了
- 調度程序方法已經改為基於Task,記得要await 它們
- IJob接口現在返回一個Task
- 一些IList屬性已經更改為IReadOnlyList ,以正確反映意圖
- SQL Server CE支持已被刪除
- DailyCalendar現在使用日期時間排除日期,並具有ISet接口來訪問它們
- IObjectSerializer有新的方法,必須實現 void Initialize()
- IInterruptableJob取消了上下文的CancellationToken
已知的問題
- Windows和Linux之間的時區id有問題,它們在同一個區域使用不同的ID
- .NET Core的沒有Remoting 支持
這次的版本變化很大,如果你是老用戶,大家要認真看下遷移指南: https://www.quartz-scheduler.net/documentation/quartz-3.x/migration-guide.html