2015-04-23 86 views
4

我正在使用quartz.net 2.3 作業標有DisallowConcurrentExecution屬性。當一個作業由TriggerJob手動啓動時,如果它已經在進行,它就不會啓動,這沒關係。但是當上一次執行完成時它會立即再次啓動。 如果在作業進行時被解僱,是否有可能阻止將來的執行?如何防止石英作業多次運行

回答

1

是的。您可以檢索作業的所有觸發器,將它們與正在執行的觸發器進行比較,如果它們在其之後計劃,則取消調度作業(觸發器將被刪除)。

所以,從你的工作:

public void Execute(IJobExecutionContext context) 
{ 
    var currentlyExecutingTrigger = context.Trigger; 
    var currentlyExecutingJobkey = context.JobDetail.Key; 

    var newTriggers = context.Scheduler.GetTriggersOfJob(key); 

    //if trigger was scheduled after currently executing trigger 
    foreach (var newTrigger in newTriggers) 
    { 
     if (newTrigger.StartTimeUtc >= trigger.StartTimeUtc) 
     { 
      //delete it 
      context.Scheduler.UnscheduleJob(newTrigger.Key); 
     } 
    } 
} 
1

如何防止從發射同時作業?

Quartz.NET 2.x的

實施IJob也裝點[DisallowConcurrentExecution]屬性的作業類。有關更多信息,請閱讀DisallowConcurrentExecutionAttribute的API文檔。

你可以找到它有文檔中 enter link description here