Перепланирование работы не работает
Я хотел бы изменить курок одной из моих работ. Поэтому я сначала проверяю, связаны ли с моей работой какие-либо триггеры. Если так, то я Reschedule
с новым триггером, который выбрал пользователь. Но когда я смотрю на AdoJobStore
нового триггера нет, и задание остановится после перепланирования.
Я положил весь этот код в try-catch
блок, но я не получаю Exception
с, но это может быть потому, что я должен поймать JobExecutionException
с вместо просто Exception
s?
var jobKey = new JobKey(jobName, jobGroup);
IScheduler sched = scheduler.GetScheduler();
IList<ITrigger> triggers = sched.GetTriggersOfJob(jobKey);
if (triggers.Count != 0)
{
ITrigger existingTrigger = triggers[0];
sched.UnscheduleJob(existingTrigger.Key);
ITrigger newTrigger = BuildTrigger(triggerName, triggerGroup);
IJobDetail job = sched.GetJobDetail(jobKey);
DialogResult dr = MsgBox.Show(string.Format("Confirm campaign '{0}' with the schedule '{1}'?", lblCampaignName.Text, txtbxMessage.Text), "Confirm Schedule", MsgBox.Buttons.YesNo, MsgBox.Icon.Question);
if (dr == DialogResult.Yes)
{
sched.RescheduleJob(existingTrigger.Key, newTrigger);
int updateResult = UpdateCampaignSchedule();
if (updateResult == 1)
MsgBox.Show("Campaign schedule successfully updated!", "Edit schedule", MsgBox.Buttons.OK, MsgBox.Icon.Info);
else
MsgBox.Show("Unable to update campaign schedule in the database.", "Edit schedule", MsgBox.Buttons.OK, MsgBox.Icon.Error);
}
}
else
{
..
}
1 ответ
Это из-за звонка sched.UnscheduleJob(existingTrigger.Key
, Это удаляет триггер из хранилища заданий. Итак, при звонке sched.RescheduleJob(existingTrigger.Key, newTrigger)
Кварц не может найти старый триггер, чтобы заменить его новым (если вы посмотрите на возвращаемое значение, он будет нулевым), и при этом он не выдаст исключение, если ваш новый триггер недействителен.
Удалить sched.UnscheduleJob(existingTrigger.Key, newTrigger
и это должно работать.