使用Quartz重新安排一次性工作

时间:2012-01-13 04:46:50

标签: triggers scheduling jobs quartz.net

我想使用不基于时间间隔的石英计划,而是在作业完成后重新安排作业。该工作可能在1分钟,2分钟等完成,但需要重新安排在1(或x)分钟后运行。

我已经尝试过以这种方式使用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);

2 个答案:

答案 0 :(得分:0)

如果您需要重新安排作业,重复间隔等于作业的执行时间,那么您必须指示触发器执行此操作。

否则,如果您只需要重复在相同时间段(重复出现)后执行的作业,则可以指定repeatCount = -1repeatInterval = TimeSpan.FromSeconds(..)。如果被解雇的作业花费的时间比repeatInterval长,那么为了防止多次执行相同的作业,您可以在作业上使用[DisallowConcurrentExecution]属性来防止这种情况发生。

答案 1 :(得分:0)

不要创建新的触发器。重新安排时使用相同的触发器。 这应该有效:

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

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

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