很多的軟件項目中都會使用到定時任務、定時輪詢數據庫同步,定時郵件通知等功能。.NET Framework具有“內置”定時器功能,通過System.Timers.Timer類。在使用Timer類需要面對的問題:計時器沒有持久化機制;計時器具有不靈活的計劃(僅能設置開始時間和重復間隔,沒有基于日期,時間等);計時器不使用線程池(每個定時器一個線程);計時器沒有真正的管理方案 - 你必須編寫自己的機制,以便能夠記住,組織和檢索任務的名稱等。
如果需要在.NET實現定時器的功能,可以嘗試使用以下這款開源免費的組件Quartz.Net組件。目前Quartz.NET版本為3.0,修改了原來的一些問題:修復由于線程本地存儲而不能與AdoJobStore協同工作的調度器信令;線程局部狀態完全刪除;quartz.serializer.type是必需的,即使非序列化RAMJobStore正在使用;JSON序列化錯誤地稱為序列化回調。
一.Quart.NET概述:
Quartz是一個作業調度系統,可以與任何其他軟件系統集成或一起使用。作業調度程序是一個系統,負責在執行預處理程序時執行(或通知)其他軟件組件 - 確定(調度)時間到達。Quartz是非常靈活的,并且包含多個使用范例,可以單獨使用或一起使用,以實現您所需的行為,并使您能夠以您的項目看起來最“自然”的方式編寫代碼。組件的使用非常輕便,并且需要非常少的設置/配置 - 如果您的需求相對基礎,它實際上可以使用“開箱即用”。Quartz是容錯的,并且可以在系統重新啟動之間保留(記住)您的預定作業。盡管Quartz對于在給定的時間表上簡單地運行某些系統進程非常有用,但當您學習如何使用Quartz來驅動應用程序的業務流程時,Quartz的全部潛能可以實現。
Quartz是作為一個小的動態鏈接庫(.dll文件)分發的,它包含所有的核心Quartz功能。 此功能的主要接口(API)是調度程序接口。 它提供簡單的操作,如調度/非調度作業,啟動/停止/暫停調度程序。如果你想安排你自己的軟件組件執行,他們必須實現簡單的Job接口,它包含方法execute()。 如果希望在計劃的觸發時間到達時通知組件,則組件應實現TriggerListener或JobListener接口。主要的Quartz'進程'可以在您自己的應用程序或獨立應用程序(使用遠程接口)中啟動和運行。
二.Quartz.NET主體類和方法解析:
1.StdSchedulerFactory類:創建QuartzScheduler實例。
/// <summary> /// 返回此工廠生成的調度程序的句柄。 /// </summary> /// <remarks> ///如果<see cref =“Initialize()”/>方法之一沒有先前調用,然后是默認(no-arg)<see cref =“Initialize()”/>方法將被這個方法調用。 /// </remarks> public virtual IScheduler GetScheduler() { if (cfg == null) { Initialize(); } SchedulerRepository schedRep = SchedulerRepository.Instance; IScheduler sched = schedRep.Lookup(SchedulerName); if (sched != null) { if (sched.IsShutdown) { schedRep.Remove(SchedulerName); } else { return sched; } } sched = Instantiate(); return sched; }
新聞熱點
疑難解答
圖片精選