當前位置:
首頁 > 最新 > NET平台開源項目之Cron任務調度CronNET

NET平台開源項目之Cron任務調度CronNET

來源:數據之巔

cnblogs.com/asxinyu/p/dotnet_Opensource

Quartznet大名鼎鼎應該很少有人不知道,相關的開源項目很多,不過那東東對新手來說,有點晦澀,加上哪個Cron表達式,可能一進去雲里霧裡的。

今天給大家介紹一個簡單的在.NET平台上運行Cron計劃任務的組件CronNET。同時也給大家推介幾個Cron表達式的工具。

一、Cron介紹和工具

cron是一個linux下的定時執行工具,可以在無需人工干預的情況下運行作業。cron伺服器可以根據配置文件約定的時間來執行特定的作務。

所以其他組件和平台根據其語法做了支持,就有了各種各樣的語言版本。

Cron的語法表達式非常靈活,也非常複雜,不過不建議大家一次性擼進去出不來,需要用到的時候用下面幾個工具查一下,生成就好。慢慢就理解了,當然簡單主要的語法看得懂就行,抄來抄去就會了。

如果要了解Cron語法,可以看下面這篇文章,非常簡潔和全面:Cron表達式。

下面給大家介紹2個好用的Cron工具:

2、Cron表達式解析組件:https://github.com/bradymholt/cron-expression-descriptor,可以將Cron表達的轉換為自然語言,支持很多語言,包括中文。、

二、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("任務開始時間:", DateTime.Now.ToLongTimeString());

cron_daemon.Start();

while (true) Thread.Sleep(6000);

}

static void MiniteTask()

{

Console.WriteLine(":定時任務執行",DateTime.Now.ToLongTimeString());

}

看看執行結果,每分鐘都執行了一次:

2.2 Windows服務

下面我們看看在windows服務中怎麼使用,起始原理差不多,Github裡面有一個windows服務的例子,不過我一般比較喜歡用XAgent來完成。

class MyService : AgentServiceBase

{

//Job

private static CronDaemon cron_daemon = new CronDaemon();

internal static void MiniteTask()

{

XTrace.WriteLine(":定時任務執行", DateTime.Now.ToLongTimeString());

}

public MyService()

{

//設置服務名稱和描述,以及線程數

DisplayName = "CronTestService";

Description = "CronTestService";

ThreadCount = 0;

cron_daemon.AddJob("* * * * *", MiniteTask);//添加job

}

/// 服務啟動

///

protected override void StartWork(String reason)

{

XTrace.WriteLine("任務開始時間:", DateTime.Now.ToLongTimeString());

cron_daemon.Start();//啟動

base.StartWork(reason);

}

/// 服務停止

protected override void StopWork(String reason)

{

base.StopWork(reason);

}

}

XAgent是一個快速,圖形化界面的Windows服務工具,集成在Newlife組件中。使用可以參考我的這篇博客:探索Newlife組件:服務代理利器XAgent的前世今生(http://www.cnblogs.com/asxinyu/p/3344031.html)。

下面是運行效果,結果,結果在右邊日誌文件中。

三、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了。。。好了,剩下的該你在業務中表演了。

四、資源

本文演示代碼下載:

CronNET.rar(https://files.cnblogs.com/files/asxinyu/CronNET.rar)

Cron表達式語法參考:

Cron表達式(http://www.cnblogs.com/zy-jiayou/p/7007303.html)

CronNET Github地址:https://github.com/kevincolyar/CronNET

Cron解析器Github地址:https://github.com/bradymholt/cron-expression-descriptor

看完本文有收穫?請轉發分享給更多人

關注「DotNet」,提升.Net技能

淘口令:複製以下紅色內容,再打開手淘即可購買

范品社,使用¥極客T恤¥搶先預覽(長按複製整段文案,打開手機淘寶即可進入活動內容)


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 DotNet 的精彩文章:

TAG:DotNet |