2012-01-13 56 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