因為工作的關係,有個程式功能需要透過一個穩定排程工具進行處理,評估之後選擇了Quartz.Net
我是透過.net 的NuGet套件進行下載安裝,這個版本(V3.0.6)必須使用.net 4.5.2之後的版本
進到程式裡面,開發環境的設定初始化,建立ScheduleFactory、Scheduler
這部份需建立兩個全域的物件,StdSchedulerFactory與Scheduler
建立工作及觸發器
在TestAsyncJob裡面
建立了 IJobDetail類別job,並註冊CsCountJob(自定的工作執行器)
建立了 IJobDetail類別job,並註冊CsCountJob(自定的工作執行器)
建立ITrigger trigger工作觸發器
Trigger的觸發方式有蠻多的,例如
WithSimpleSchedule、WithDailyTimeIntervalSchedule、WithCronSchedule及WithCalendarIntervalSchedule
這次專案是使用WithDailyTimeIntervalSchedule,並設定每5秒進行一次trigger
完成Job與Trigger 的宣告後,再加入到Scheduler的工作排程
創建工作實體物件
CsCountJob是由IJobDetail所註冊的工作實體, 用來執行所排定的工作內容,實作IJob介面
Execute method,是實作IJob的工作執行方法,可以放置要進行執行的工作區段
目前Execute內部是用來處理Udp通訊封包的資料接收,並即時回饋至UI。
JobDataMap物件是由IJobDetail所定義的參數容器,主要是用來傳遞工作執行所需要的參數資訊。
另外在工作實體的宣告,在工作類別會使用DisallowConcurrentExecution進行過濾,主因是工作排程是每5秒一次,但若單次的工作執行階段會超過Trigger的秒數時間,為避免排程出現干擾的狀況,必須在類別宣告[DisallowConcurrentExecution],若當次排程尚未完成,則在trigger後的工作執行緒,將不允許執行。
Quartz.net在V3.0以後,會整合很多非同步執行的操作,因此像在TestAsyncJob Method的部份會使用async Task進行宣告
留言
張貼留言