2010-10-22 27 views
1

...發生下一個執行時間時仍然執行作業時會發生什麼?當Quartz.NET/Quartz在

舉例來說,如果我有發生,每30秒鐘,30秒鐘,這兩點仍在運行後,將下一個實例來發揮作用,或者它會等待一份工作?

+0

在自己的安裝中自己驗證它不到一分鐘的時間嗎?創建作業比花費很長時間,甚至更容易,永不完成(例如等待用戶輸入);每隔30秒安排一次,瞧!你有你的答案。 – ewall 2010-10-22 13:40:38

回答

2

簡短的答案是,一個新的工作會被執行,除非你是從IStatefulJob繼承,在這種情況下,只有一個任務實例被允許同時運行。

2

由於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); 
    } 

} 

這樣,下一份工作在第一份工作完成後不會立即執行。