Quartz.net官方開發指南 第五課: SimpleTrigger
如果需要讓任務只在某個時刻執行一次,或者,在某個時刻開始,然后按照某個時間間隔重復執行,簡單地說,如果你想讓觸發器在
通過這樣的描述,你可能很驚奇地發現SimpleTrigger包括這些屬性:開始時間,結束時間,重復次數,重復間隔。所有這屬性都是你期望它所應具備的,只有end-time屬性有一些條目與之關聯。
重復次數可能是0,正數或者一個常量值SimpleTrigger.REPEAT_INDEFINITELY。重復間隔時間屬性可能是0,正的long型,這個數字以毫秒為單位。注意:如果指定的重復間隔時間是0,那么會導致觸發器按照‘重復數量’定義的次數并發觸發(或者接近并發)。
Quartz.TriggerUtils類對處理這樣的循環也提供了很多支持。
EndTime(如果這個屬性被設置)屬性會覆蓋重復次數屬性,這對創建一個每隔10秒就觸發一次直到某個時間結束的觸發器非常有用,這就可以不計算開始時間和結束時間之間的重復數量。也可以指定一個結束時間,然后使用REPEAT_INDEFINITELY作為重復數量。(甚至可以指定一個大于結束時間之前實際重復次數的整數作為重復次數)。一句話,EndTime屬性控制權高于重復次數屬性。
SimpleTrigger有幾個不同的構造函數,下面我們來看看這結果構造函數:
One of SimpleTrigger's Constructors
string group,
DateTime startTime,
NullableDateTime endTime endTime,
int repeatCount,
long repeatInterval)
SimpleTrigger Example 1 - Create a trigger that fires exactly once, ten seconds from now
null,
DateTime.Now.AddSeconds(10),
null,
0,
0L);
SimpleTrigger Example 2 - Create a trigger that fires immediately, then repeats every 60 seconds, forever
null,
DateTime.Now,
null,
SimpleTrigger.REPEAT_INDEFINITELY,
60 * 1000);
SimpleTrigger Example 3 - Create a trigger that fires immediately, then repeats every 10 seconds until 40 seconds from now
"myGroup",
DateTime.Now,
DateTime.Now.AddSeconds(40),
SimpleTrigger.REPEAT_INDEFINITELY,
10 * 1000);
SimpleTrigger Misfire Instructions——SimpleTrigger的未觸發指令
“未觸發”發生時,SimpleTrigger有幾個指令可以用來通知Quartz進行相關處理。(“未觸發”在上節課中介紹過了)。這些指令以常量形式定義在SimpleTrigger本身,這些指令如下:
Misfire Instruction Constants of SimpleTrigger
MISFIRE_INSTRUCTION_FIRE_NOW
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT
回顧前面的課程你可以知道,每個觸發器都有一個Trigger.MISFIRE_INSTRUCTION_SMART_POLICY指令可用,并且,這個指令對于每個類型的觸發器都是缺省的。