亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

Quartz API

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

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

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

Trigger.

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

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

	// 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時,使用了流接口去構(gòu)建IJobDetail。同樣,使用TriggerBuilder定義trigger時,使用了流接口和返回trigger類型的擴展方法。可用的的調(diào)度擴展方法有:

  • WithCalendarIntervalSchedule
  • WithCronSchedule
  • WithDailyTimeIntervalSchedule
  • WithSimpleSchedule

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

Jobs and Triggers

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

IJob 接口

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

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

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

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

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

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

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

Identities

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

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

相關(guān)文章

  • C#獲取Excel第一列的實例方法

    C#獲取Excel第一列的實例方法

    在本篇文章里小編給各位分享了關(guān)于C# 怎么獲取Excel第一列的實例方法和代碼,需要的朋友們可以學習下。
    2019-08-08
  • 自己編寫sqlhelper類示例分享

    自己編寫sqlhelper類示例分享

    這篇文章主要介紹了自己編寫sqlhlper類示例,需要的朋友可以參考下
    2014-04-04
  • C#創(chuàng)建Excel多級分組的方法

    C#創(chuàng)建Excel多級分組的方法

    這篇文章主要為大家詳細介紹了C#創(chuàng)建Excel多級分組的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 淺析C#中靜態(tài)方法和非靜態(tài)方法的區(qū)別

    淺析C#中靜態(tài)方法和非靜態(tài)方法的區(qū)別

    C#靜態(tài)方法與非靜態(tài)方法的區(qū)別不僅僅是概念上的,那么他們有什么具體的區(qū)別呢?讓我們通過本文向大家介紹下C#中靜態(tài)方法和非靜態(tài)方法的區(qū)別,一起看看吧
    2017-09-09
  • 基于C#實現(xiàn)音樂文件的播放功能

    基于C#實現(xiàn)音樂文件的播放功能

    本文介紹了如何使用C#編寫一個簡單的程序來實現(xiàn)音樂文件的播放功能,程序能夠讀取MP3文件和ogg文件,并通過合適的控件進行播放,同時,程序具備處理異常、良好的用戶界面和兼容性的特點,感興趣的朋友可以自己動手嘗試一下
    2024-05-05
  • C#拼接SQL語句 用ROW_NUMBER實現(xiàn)的高效分頁排序

    C#拼接SQL語句 用ROW_NUMBER實現(xiàn)的高效分頁排序

    C#拼接SQL語句,SQL Server 2005+,多行多列大數(shù)據(jù)量情況下,使用ROW_NUMBER實現(xiàn)的高效分頁排序
    2012-05-05
  • C# WinForm實現(xiàn)Win7 Aero透明效果代碼

    C# WinForm實現(xiàn)Win7 Aero透明效果代碼

    這篇文章主要介紹了C# WinForm實現(xiàn)Win7 Aero透明效果代碼,通過調(diào)用dwmapi.dll相關(guān)方法實現(xiàn),需要的朋友可以參考下
    2014-07-07
  • Unity3D實現(xiàn)打磚塊游戲

    Unity3D實現(xiàn)打磚塊游戲

    這篇文章主要為大家詳細介紹了Unity3D實現(xiàn)打磚塊游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C#獲取進程或線程相關(guān)信息的方法

    C#獲取進程或線程相關(guān)信息的方法

    這篇文章主要介紹了C#獲取進程或線程相關(guān)信息的方法,涉及C#操作進程及線程的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#中事件只能在內(nèi)部調(diào)用的原因分析

    C#中事件只能在內(nèi)部調(diào)用的原因分析

    事件(Event)?基本上說是一個用戶操作,如按鍵、點擊、鼠標移動等等,或者是一些提示信息,如系統(tǒng)生成的通知。應用程序需要在事件發(fā)生時響應事件,這篇文章主要介紹了C#中事件為什么只能在內(nèi)部調(diào)用,需要的朋友可以參考下
    2021-11-11

最新評論