...發生下一個執行時間時仍然執行作業時會發生什麼?當Quartz.NET/Quartz在
舉例來說,如果我有發生,每30秒鐘,30秒鐘,這兩點仍在運行後,將下一個實例來發揮作用,或者它會等待一份工作?
...發生下一個執行時間時仍然執行作業時會發生什麼?當Quartz.NET/Quartz在
舉例來說,如果我有發生,每30秒鐘,30秒鐘,這兩點仍在運行後,將下一個實例來發揮作用,或者它會等待一份工作?
簡短的答案是,一個新的工作會被執行,除非你是從IStatefulJob繼承,在這種情況下,只有一個任務實例被允許同時運行。
由於TskTsk回答,您可以實現IStatefulJob insted的IJob的,但有一個陷阱!如果你的工作正在執行超過30秒(因此你有一個或更多的工作等待這個完成),執行後所有正在等待的工作將立即開火!爲了克服這個問題,你需要創建一個實現SimpleTrigger的新類。這個新的觸發器類應該覆蓋GetFireTimeAfter。
public class MyTrigger : SimpleTrigger
{
public MyTrigger(string name,
string group,
DateTime startTimeUtc,
DateTime? endTimeUtc,
int repeatCount,
TimeSpan repeatInterval) : base(name, startTimeUtc, endTimeUtc, repeatCount, repeatInterval)
{
}
public override DateTime? GetFireTimeAfter(DateTime? afterTimeUtc)
{
return DateTime.UtcNow.AddSeconds(RepeatInterval.TotalSeconds);
}
}
這樣,下一份工作在第一份工作完成後不會立即執行。
在自己的安裝中自己驗證它不到一分鐘的時間嗎?創建作業比花費很長時間,甚至更容易,永不完成(例如等待用戶輸入);每隔30秒安排一次,瞧!你有你的答案。 – ewall 2010-10-22 13:40:38