2012-01-13 3 views
0

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

Я уже пробовал использовать Перепланировать таким образом, но работа не была уволена.

Планирование впервые:

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

Я допустил ошибку в имени триггера и группе триггеров перепланирования. его следует перепланировать («alertJobTrigger», «triggerGroup1», ...); –

ответ

0

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

В противном случае, если вам нужно только повторить задание, которое выполняется после того же периода времени (повторяющийся), вы можете указать repeatCount = -1 и repeatInterval = 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 вы рассмотрели для вышеупомянутого ответа. –

Смежные вопросы