若是用知乎,能夠關注專欄:.NET開源項目和PowerBI社區html
Quartznet大名鼎鼎應該不多有人不知道,相關的開源項目不少,不過那東東對新手來講,有點晦澀,加上哪一個Cron表達式,可能一進去雲裏霧裏的。今天給你們介紹一個簡單的在.NET平臺上運行Cron計劃任務的組件CronNET。同時也給你們推介幾個Cron表達式的工具。linux
本文原文地址:.NET平臺開源項目速覽(21)Cron任務調度CronNETgit
1.Cron介紹和工具
cron是一個linux下的定時執行工具,能夠在無需人工干預的狀況下運行做業。cron服務器能夠根據配置文件約定的時間來執行特定的做務。因此其餘組件和平臺根據其語法作了支持,就有了各類各樣的語言版本。Cron的語法表達式很是靈活,也很是複雜,不過不建議你們一次性擼進去出不來,須要用到的時候用下面幾個工具查一下,生成就好。慢慢就理解了,固然簡單主要的語法看得懂就行,抄來抄去就會了。github
若是要了解Cron語法,能夠看下面這篇文章,很是簡潔和全面:Cron表達式。express
下面給你們介紹2個好用的Cron工具:c#
1.在線Cron表達式生成器:http://cron.qqe2.com/ 。配置至關全面,能夠把你想要執行的任務直接圖形化界面配置出來,獲得Cron表達式。也能夠反解析到UI,以下圖:windows
2.Cron表達式解析組件:https://github.com/bradymholt/cron-expression-descriptor,能夠將Cron表達的轉換爲天然語言,支持不少語言,包括中文。重點包括了中文服務器
看看第3部分咱們的演示。ide
2.CronNET介紹和使用
CronNET是一個簡單的C#類庫,用來執行Cron表達式定義的計劃任務。它支持絕大部分Cron表達式,看測試下面的代碼,很是全面了。並且整個下面短小精悍,總過不過110行代碼。因此集成到本身的項目中去也很是容易。函數
Github地址:https://github.com/kevincolyar/CronNET
下面咱們經過一段簡單的代碼來看看效果和使用。本身下面源代碼編譯dll,引用命名空間 using CronNET
2.1 基本使用
定義一個全局的CronDaemon對象,用來存儲Job,在main函數中添加cron任務,我添加了一個每分鐘執行的任務,任務的內容就是打印個日誌。
private static CronDaemon cron_daemon = new CronDaemon(); static void Main(string[] args) { cron_daemon.AddJob("* * * * *", MiniteTask); Console.WriteLine("任務開始時間:{0}", DateTime.Now.ToLongTimeString()); cron_daemon.Start(); while (true) Thread.Sleep(6000); } static void MiniteTask() { Console.WriteLine("{0}:定時任務執行",DateTime.Now.ToLongTimeString()); }
看看執行結果,每分鐘都執行了一次:
2.2 Windows服務
下面咱們看看在windows服務中怎麼使用,起始原理差很少,Github裏面有一個windows服務的例子,不過我通常比較喜歡用XAgent來完成。
class MyService : AgentServiceBase<MyService> { //Job private static CronDaemon cron_daemon = new CronDaemon(); internal static void MiniteTask() { XTrace.WriteLine("{0}:定時任務執行", DateTime.Now.ToLongTimeString()); } public MyService() { //設置服務名稱和描述,以及線程數 DisplayName = "CronTestService"; Description = "CronTestService"; ThreadCount = 0; cron_daemon.AddJob("* * * * *", MiniteTask);//添加job } /// <summary>服務啓動</summary> /// </remarks> protected override void StartWork(String reason) { XTrace.WriteLine("任務開始時間:{0}", DateTime.Now.ToLongTimeString()); cron_daemon.Start();//啓動 base.StartWork(reason); } /// <summary>服務中止</summary> protected override void StopWork(String reason) { base.StopWork(reason); } }
XAgent是一個快速,圖形化界面的Windows服務工具,集成在Newlife組件中。使用能夠參考個人這篇博客:探索Newlife組件:服務代理利器XAgent的前世此生。
下面是運行效果,結果,結果在右邊日誌文件中。
3.cron-expression-descriptor使用
cron-expression-descriptor是一個C#開發的開源Cron表達式解析器,能夠將Cron表達式轉換爲天然語言,支持英語/西班牙語/俄語/法語/簡體中文等語言。支持的平臺有.NET Core1.0,.NET Framework 4.5和Mono 4.5。
Github地址:https://github.com/bradymholt/cron-expression-descriptor
好比咱們來看幾個例子,直接在VS中使用Nuget,搜索CronExpressionDescriptor安裝便可:
static void Main(string[] args) { XTrace.UseConsole(); XTrace.WriteLine(ExpressionDescriptor.GetDescription("*/6 * 1 * *", new Options() { Locale= "zh-CN" })); XTrace.WriteLine(ExpressionDescriptor.GetDescription("* * * 2,6 *", new Options() { Locale = "zh-CN" })); XTrace.WriteLine(ExpressionDescriptor.GetDescription("*/3 12 * 1 MON-FRI", new Options() { Locale = "zh-CN" })); Console.ReadKey(); }
解析的內容以下,咱們在選項中配置了Local="zh-CN":
注意安裝後,支持的語言資源文件都在bin目錄下,以下面就是支持的語言:
因此有了這東西,作一個在線版的Cron解析器也很easy了。。。好了,剩下的該你在業務中表演了。
4.資源
本文演示代碼下載:CronNET.rar
Cron表達式語法參考:Cron表達式
CronNET Github地址:https://github.com/kevincolyar/CronNET
Cron解析器Github地址:https://github.com/bradymholt/cron-expression-descriptor