2012-01-13 51 views
0

我想使用不基於時間間隔的石英計劃,但是在作業完成後重新計劃作業。這項工作可能會在1分鐘,2分鐘內完成,但需要重新安排在1分鐘或1分鐘後運行。使用Quartz重新計劃一次性作業

我已經嘗試過以這種方式使用Reschedule,但工作沒有被解僱。

調度的第一次:

Trigger alertJobTrigger = new SimpleTrigger("alertJobTrigger", 
              "triggerGroup1", 
              DateTime.UtcNow.AddSeconds(60), 
              null, 
              0, 
              TimeSpan.Zero); 
scheduler.ScheduleJob(alertJobDetail, alertJobTrigger); 

試圖重新安排工作完成後,同一個作業:如果您需要重複間隔等於重新安排工作

Trigger trigger = Global.scheduler.GetTrigger("alertJobTrigger", 
               "triggerGroup1"); 

Trigger newTrigger = new SimpleTrigger("alertJobTrigger", 
             "triggerGroup1", 
             trigger.JobName, 
             trigger.JobGroup, 
             DateTime.UtcNow.AddSeconds(60), 
             null, 
             0, 
             TimeSpan.Zero);  

Global.scheduler.RescheduleJob(trigger.JobName, trigger.JobGroup, newTrigger); 
+0

我在Reschedule的觸發器名稱和觸發器組中犯了一個錯誤。它應該是Reschedule(「alertJobTrigger」,「triggerGroup1」,...); – 2012-01-13 04:54:50

回答

0

作業的執行時間,那麼你將不得不指示觸發器來做到這一點。

否則,如果您只需要重複在相同時間段(重複執行)後執行的作業,則可以指定repeatCount = -1repeatInterval = TimeSpan.FromSeconds(..)。並且,如果作業觸發需要的時間比repeatInterval長,則可以在作業頂部使用[DisallowConcurrentExecution]屬性來防止執行同一作業。

0

不要創建新的觸發器。重新計劃時使用相同的觸發器。 這應該工作:

Trigger trigger = Global.scheduler.GetTrigger("alertJobTrigger","triggerGroup1"); 

trigger.set(); //set whichever values you want. 

Global.scheduler.RescheduleJob(trigger.JobName, trigger.JobGroup, trigger); 
+0

我可以知道你爲上述答案考慮過哪個版本的quartz.net。 – 2014-10-08 14:47:06