C#定時任務(wù)框架Quartz.NET介紹與用法
什么是定時任務(wù)?
最近恰巧有類似的需求, 需要做一個應(yīng)用程序服務(wù), 每天定時給服務(wù)器上傳采集的數(shù)據(jù)。
在沒有任務(wù)框架的使用前提下, 如果我們想要實現(xiàn)類似的需求,可以自己寫一個計時器, 然后24小時運行,達(dá)到指定的時間就運行。但是這樣不僅擴展性差, 而且不易于維護。
在定時任務(wù)這塊, 也有非常的多的框架支持,開箱即用, 那么下面將主要介紹一下Quartz.NET框架
Quartz.NET介紹
Quartz.NET是一個Github開源項目,用于創(chuàng)建一個免費商業(yè)用途的作業(yè)調(diào)度框架。
注:支持 .NET Core/.NET Standard 2.0 和 .NET 框架 4.6.1 及更晚版本。
Quartz.NET入門
在我們使用定時任務(wù)框架的之前, 首先我們需要確定的是, 它大概具備哪些內(nèi)容。
- 靈活的指定某項任務(wù)
- 靈活的啟動時間配置
- 傳遞參數(shù)并且監(jiān)聽
了解了這些基礎(chǔ)概念之后, 我們便開始學(xué)習(xí)如何在Quartz.NET當(dāng)中使用這些功能。
1.創(chuàng)建一個任務(wù)
任務(wù)是一個抽象的概念, 實際來說它應(yīng)該指的是某種任務(wù), 例如: 想要每3秒輸入一個字符串, 那么我們就可以這樣做。
- 下面演示創(chuàng)建了一個類, 它繼承于IJob接口, 實現(xiàn)了Execute方法, 任務(wù)就是輸出一個字符串。
public class TestJob : IJob { public async Task Execute(IJobExecutionContext context) { await Console.Out.WriteLineAsync($"{DateTime.Now}:Hello!"); } }
- 創(chuàng)建任務(wù)
//創(chuàng)建一個工作 IJobDetail job = JobBuilder.Create<TestJob>() .WithIdentity("TestJob", "Test") .Build();
2.配置任務(wù)的參數(shù)
為任務(wù)配置一個觸發(fā)條件及相關(guān)的參數(shù)。當(dāng)該配置的參數(shù)一旦達(dá)到了條件, 上面的任務(wù)將被觸發(fā)。
//創(chuàng)建一個觸發(fā)條件 ITrigger trigger = TriggerBuilder.Create() .WithIdentity("TestJobTrigger", "Test") .WithSimpleSchedule(x => { x.WithIntervalInSeconds(3).RepeatForever(); }) .Build();
3.啟動任務(wù)
創(chuàng)建一個任務(wù)調(diào)度器, 將任務(wù)和配置參數(shù)添加到調(diào)度器當(dāng)中。
StdSchedulerFactory factory = new StdSchedulerFactory(); //創(chuàng)建任務(wù)調(diào)度器 IScheduler scheduler = await factory.GetScheduler(); //啟動任務(wù)調(diào)度器 scheduler.Start(); //將創(chuàng)建的任務(wù)和觸發(fā)器條件添加到創(chuàng)建的任務(wù)調(diào)度器當(dāng)中 scheduler.ScheduleJob(job, trigger);
4.實際效果
在上面的代碼中,我們創(chuàng)建了一個任務(wù)輸出一段字符串, 然后為該任務(wù)創(chuàng)建了一個配置, 每3秒執(zhí)行一次, 那么實際效果會每間隔3秒輸出:
更多配置
特定時間觸發(fā),重復(fù)觸發(fā),單次觸發(fā), 觸發(fā)次數(shù),開始時間, 結(jié)束時間。 這些在框架當(dāng)中都有該功能
觸發(fā)器表達(dá)式 ,例如: 每周一上午, 或每周一、周三、周五等等
下面是一些表達(dá)式及其含義的示例示例 1 - 創(chuàng)建每 5 分鐘觸發(fā)一次的觸發(fā)器的表達(dá)式
"0 0/5 * * * ?"
示例 2 - 創(chuàng)建每 5 分鐘觸發(fā)一次的觸發(fā)器的表達(dá)式,在分鐘后 10 秒(即上午 10:00:10、上午 10:05:10 等)。
"10 0/5 * * * ?"
示例 3 - 用于創(chuàng)建觸發(fā)器的表達(dá)式,該觸發(fā)器在每個星期三和周五的 10:30、11:30、12:30 和 13:30 觸發(fā)。
"0 30 10-13 ? * WED,FRI"
示例 4 - 創(chuàng)建觸發(fā)器的表達(dá)式,在每月 5 日到 20 日上午 8 點到上午 10 點之間每半小時觸發(fā)一次。請注意,觸發(fā)器不會于上午 10:00 觸發(fā),只是在 8:00、8:30、9:00 和 9:30
"0 0/30 8-9 5,20 * ?"
- 監(jiān)聽器: 可以檢測你的任務(wù)執(zhí)行狀態(tài): 是否工作, 是否錯誤,是否已完成等
關(guān)于具體的使用方法, 在文檔中有詳細(xì)的介紹:
到此這篇關(guān)于C#定時任務(wù)框架Quartz.NET介紹與用法的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解C#如何使用屏障實現(xiàn)多線程并發(fā)操作保持同步
這篇文章主要為大家詳細(xì)介紹了C#如何使用屏障實現(xiàn)多線程并發(fā)操作保持同步,文中的示例代碼簡潔易懂,具有一定的借鑒價值,有需要的小伙伴可以參考下2024-01-01C#中把任意類型的泛型集合轉(zhuǎn)換成SQLXML數(shù)據(jù)格式的實例
本文主要分享了C#中把任意類型的泛型集合轉(zhuǎn)換成SQLXML數(shù)據(jù)格式的實例代碼。具有很好的參考價值,需要的朋友可以看下2016-12-12C#實現(xiàn)將RTF轉(zhuǎn)為HTML的示例代碼
RTF文檔即富文本格式(Rich?Text?Format)的文檔。我們在處理文件時,遇到需要對文檔格式進行轉(zhuǎn)換時,可以將RTF轉(zhuǎn)為其他格式,如轉(zhuǎn)為DOCX/DOC、PDF或者HTML。本文將利用C#實現(xiàn)RTF轉(zhuǎn)HTML,需要的可以參考一下2022-04-04深入學(xué)習(xí)C#網(wǎng)絡(luò)編程之HTTP應(yīng)用編程(下)
這篇文章主要介紹了深入學(xué)習(xí)C#網(wǎng)絡(luò)編程之HTTP應(yīng)用編程的相關(guān)知識,文中講解的非常詳細(xì),幫助大家更好的學(xué)習(xí)c#網(wǎng)絡(luò)編程,感興趣的朋友可以了解下2020-06-06Unity實現(xiàn)鼠標(biāo)或者手指點擊模型播放動畫
這篇文章主要為大家詳細(xì)介紹了Unity實現(xiàn)鼠標(biāo)或者手指點擊模型播放動畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-01-01-
最新評論