Как заставить Quartz.net выполнять только оставшееся количество повторений задания?
Допустим, у нас есть задание и соответствующий триггер, настроенный следующим образом:
var jobKey = new JobKey(typeof(HelloJob).Name, typeof(HelloJob).Name);
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity(jobKey)
.RequestRecovery()
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity(string.Format("{0}Trigger", typeof(HelloJob).Name), typeof(HelloJob).Name)
.StartAt(DateBuilder.FutureDate(1, IntervalUnit.Second))
.WithSimpleSchedule(x => x
.WithIntervalInSeconds(1)
.WithRepeatCount(9))
.Build();
используя "quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz".
Ну, я ожидаю, что работа будет выполнена 10 раз в нормальной ситуации, и, конечно, это так. Проблема в том, что я хочу, чтобы задание продолжало счетчик повторений, если в течение его жизненного цикла произошла остановка.
Например, я останавливаю программу, когда выполняется пятое выполнение задания, и при следующем запуске программы я хочу выполнить задание только в пять раз, но оно выполняется 10 раз.
Как мне настроить планировщик, задание и триггер, чтобы сделать это?
2 ответа
Вы можете сделать это, сохранив оставшееся количество между выполнением программы:
- в программе "Стоп" сохранить оставшееся количество во внешнем хранилище (файл, дБ и т. д.). Лучший способ сделать это после каждого выполнения задания.
- по программе "Пуск" считайте значение из хранилища и используйте его в
.WithRepeatCount()
вместо постоянного.
Убедитесь, что объекты базы данных созданы, и настройте хранилища заданий.
Посмотри этот пример. Это может помочь вам.