最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Quartz.Net任務(wù)和觸發(fā)器實(shí)現(xiàn)方法詳解

 更新時(shí)間:2022年02月07日 11:05:22   作者:David Huang  
這篇文章主要介紹了Quartz.Net任務(wù)和觸發(fā)器實(shí)現(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Quartz API

Quartz API的主要接口和類如下:

  • IScheduler - 和調(diào)度器交互的主要API
  • IJob - 調(diào)度器會(huì)執(zhí)行實(shí)現(xiàn)這個(gè)接口的實(shí)例
  • IJobDetail - 用來定義任務(wù)的實(shí)例
  • ITrigger - 定義任務(wù)執(zhí)行安排的組件
  • JobBuilder - 用來定義/構(gòu)造JobDetail的實(shí)例,其中JobDetail的實(shí)例定義Jobs的實(shí)例
  • TriggerBuilder - 用來定義/構(gòu)造Trigger的實(shí)例

在本文中,為了可讀性,下列說法可互換: IScheduler 和 Scheduler, IJob 和 Job, IJobDetail 和 JobDetail, ITrigger 和

Trigger.

一個(gè)調(diào)度器的生命周期,從通過SchedulerFactory創(chuàng)建開始,到調(diào)用它的Shutdown()方法結(jié)束。一個(gè)IScheduler實(shí)現(xiàn)后,可以使用添加、刪除、列出任務(wù)和觸發(fā)器,或者其他調(diào)度相關(guān)的操作(例如暫停一個(gè)觸發(fā)器)。然而,如Lesson 1里講到的,一個(gè)調(diào)度器不會(huì)真正觸發(fā)任務(wù)觸發(fā)器(執(zhí)行任務(wù))直到調(diào)用 Start()方法啟動(dòng)它。

Quartz提供定義為領(lǐng)域特定語言(DSL,有時(shí)稱為“流接口(fluent interface)”)的“構(gòu)建者(builder)”類。在上一課中,你看到了它的一個(gè)例子,在這里我們再看其中一部分。

	// define the job and tie it to our HelloJob class
	IJobDetail job = JobBuilder.Create<HelloJob>()
		.WithIdentity("myJob", "group1") // name "myJob", group "group1"
		.Build();
		
	// Trigger the job to run now, and then every 40 seconds
	ITrigger trigger = TriggerBuilder.Create()
		.WithIdentity("myTrigger", "group1")
		.StartNow()
		.WithSimpleSchedule(x => x
			.WithIntervalInSeconds(40)
			.RepeatForever())      
		.Build();
		
	// Tell quartz to schedule the job using our trigger
	await sched.scheduleJob(job, trigger);

這段代碼中,使用JobBuilder定義job時(shí),使用了流接口去構(gòu)建IJobDetail。同樣,使用TriggerBuilder定義trigger時(shí),使用了流接口和返回trigger類型的擴(kuò)展方法??捎玫牡恼{(diào)度擴(kuò)展方法有:

  • WithCalendarIntervalSchedule
  • WithCronSchedule
  • WithDailyTimeIntervalSchedule
  • WithSimpleSchedule

DateBuilder 類提供了多種方法以便于構(gòu)造 DateTimeOffset 實(shí)例來指定特定時(shí)間點(diǎn)(例如,指定為下個(gè)小時(shí)的時(shí)間 - 換句話說,如果現(xiàn)在是9:43:27,指定的時(shí)間就是10:00:00)。

Jobs and Triggers

任務(wù)是一個(gè)實(shí)現(xiàn)了IJob接口的類,它只有一個(gè)簡單的方法。

IJob 接口

  namespace Quartz
  {
    public interface IJob
    {
      Task Execute(JobExecutionContext context);
    }
  }

當(dāng)任務(wù)的觸發(fā)器觸發(fā)時(shí),調(diào)度器的其中一個(gè)工作線程會(huì)調(diào)用Execute(..)方法。傳遞給這個(gè)方法的JobExecutionContext對象提供了包含它的“運(yùn)行時(shí)(run-time)”環(huán)境信息的job實(shí)例,這些信息包括訪問執(zhí)行它的調(diào)度器的句柄,觸發(fā)這個(gè)操作的觸發(fā)器的句柄,任務(wù)的JobDetail對象,和一些其他信息。

JobDetail對象是 Quartz.NET 客戶(client)(你的程序)把任務(wù)加入到調(diào)度器時(shí)產(chǎn)生的。它包括了多種Job的屬性,而且提供了JobDataMap,它可以為job類的實(shí)例存儲(chǔ)狀態(tài)信息。這就是job實(shí)例的本質(zhì),下一節(jié)中會(huì)更詳細(xì)的介紹。

觸發(fā)器對象用來觸發(fā)任務(wù)的執(zhí)行。當(dāng)你想調(diào)度一個(gè)任務(wù)時(shí),應(yīng)實(shí)例化一個(gè)觸發(fā)器并“調(diào)整”它的屬性以滿足你希望的調(diào)度安排。觸發(fā)器還可以擁有與其關(guān)聯(lián)的JobDataMap對象,這對傳遞參數(shù)給任務(wù)是非常有用的。Quartz提供了幾種不同類型的觸發(fā)器,但應(yīng)用最多的是SimpleTrigger(ISimpleTrigger接口)和CronTrigger(ICronTrigger接口)。

如果你需要“一次性”操作(在指定時(shí)間只進(jìn)行一次操作),或者在指定時(shí)間進(jìn)行一次任務(wù),并在延遲時(shí)間執(zhí)行N次,那么用SimpleTrigger是非常方便的。如果你觸發(fā)任務(wù)基于像日歷一樣的計(jì)劃,例如“每周五,中午”或“每月10號(hào)10:15”,那么CronTrigger是非常有用的。

為什么分開用任務(wù)和觸發(fā)器?許多任務(wù)調(diào)度器里沒有分開的任務(wù)和觸發(fā)器的概念。其中一些簡單定義一個(gè)“任務(wù)”為有簡單任務(wù)標(biāo)志符的一個(gè)執(zhí)行時(shí)間(計(jì)劃),其他的很像Quartz的任務(wù)和觸發(fā)器綜合到一起的概念。開發(fā)Quartz時(shí),我們決定把計(jì)劃和在計(jì)劃中進(jìn)行的工作分開是非常有意義的。這有很多好處(我們覺得)。

例如,任務(wù)可以獨(dú)立于觸發(fā)器,創(chuàng)建并存儲(chǔ)在任務(wù)計(jì)劃中,并且多個(gè)觸發(fā)器可以與同一個(gè)任務(wù)關(guān)聯(lián)。另一個(gè)低耦合的好處是,可以配置那些關(guān)聯(lián)的觸發(fā)器已經(jīng)過期,但仍然在調(diào)度器里的任務(wù),這使得之后不用重新定義就可以再次調(diào)度它。這同樣允許你修改或替換一個(gè)觸發(fā)器,而不用重新定義與它關(guān)聯(lián)的任務(wù)。

Identities

任務(wù)和觸發(fā)器在注冊到Quartz調(diào)度器時(shí)可以給定標(biāo)識(shí)鍵。任務(wù)和觸發(fā)器的鍵(JobKey and TriggerKey)使得它們可以分組,方便分類規(guī)劃你的任務(wù)和觸發(fā)器,例如“報(bào)告任務(wù)”和“維護(hù)任務(wù)”。在同一組內(nèi)任務(wù)和觸發(fā)器的名稱(name)屬性必須是唯一的。話句話說,任務(wù)和觸發(fā)器的完整鍵(標(biāo)識(shí)),即名稱(name)和組(group)的組合是惟一的。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

武城县| 台中市| 嘉祥县| 攀枝花市| 涿鹿县| 山西省| 抚州市| 郯城县| 扶沟县| 花莲县| 镇巴县| 岑巩县| 芷江| 微山县| 南和县| 红安县| 三原县| 习水县| 南投县| 永顺县| 黄冈市| 团风县| 德兴市| 新邵县| 阜新市| 济南市| 获嘉县| 德清县| 二连浩特市| 静宁县| 石泉县| 绥宁县| 宿迁市| 铜川市| 保山市| 康平县| 瑞丽市| 朝阳区| 文登市| 元谋县| 乐至县|