Перепланирование работы One-Shot с помощью Quartz - PullRequest
0 голосов
/ 13 января 2012

Я хочу использовать кварцевое планирование не на основе временного интервала, а для перепланирования задания после его завершения.Задание может быть выполнено через 1 мин, 2 мин и т. Д., Но его необходимо перенести на 1 (или х) мин позже.

Я уже пытался использовать 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 голосов
/ 12 декабря 2012

Не создавать новый триггер. Используйте тот же триггер при перепланировании.Это должно работать:

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

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

Global.scheduler.RescheduleJob(trigger.JobName, trigger.JobGroup, trigger);
0 голосов
/ 07 декабря 2012

Если вам нужно перепланировать задание с интервалом повторения, равным времени выполнения задания, вам нужно будет указать для этого триггер.

В противном случае, если вам нужно просто повторить задание, которое выполняется после того жепериод времени (повторяющийся), то вы можете указать repeatCount = -1 и repeatInterval = TimeSpan.FromSeconds(..).И чтобы предотвратить многократное выполнение одного и того же задания, если выполняемое задание занимает больше времени, чем repeatInterval, вы можете использовать атрибут [DisallowConcurrentExecution] в верхней части задания, чтобы предотвратить это.

...