У меня есть служба, которая будет запускаться каждые X минут. Если для какой-то непредвиденной причины эта работа занимает больше времени, чем X минут, я хочу убедиться, что триггер не запускает второй экземпляр этой работы.
Пример сценария
- У меня есть Job X, захватывает файлы и запускается Quartz каждые 1 минуту.
- Задание X обычно обрабатывает 100 файлов за 1 минуту, более 100 файлов занимают больше 1 минуты.
- С момента последнего запуска, 150 файлов случаются там, поэтому Job X запускается и начинает обработку. Когда достигнута 1 минута, было обработано 100 файлов, осталось 50 файлов, а Job X продолжает работать.
- Однако второй экземпляр Job X стартует, потому что триггер срабатывает каждые 1 минуту.
- Теперь у меня есть 2 экземпляра Job X, которые собирают те же 50 файлов.
Есть ли способ подключить Quartz.NET, чтобы разрешить только один экземпляр задания? Я в порядке со вторым триггером, ожидающим завершения первого, или я тоже в порядке с возможностью пропустить второй триггер, так как он будет запущен через минуту.
Я взглянул на Java-версию Quartz API и нашел свойство DisallowConcurrentExecution ', но не нашел такого же в .NET. версия.
Мой код для реализации Quartz.NET
public IScheduler Scheduler { get; set; }
public IJobListener AutofacJobListener { get; set; }
public void Start()
{
var trigger = TriggerUtils.MakeMinutelyTrigger(1);
trigger.Name = @"Document Import Trigger";
Scheduler.ScheduleJob(new JobDetail("Document Import", null, typeof(DocumentImportJob)), trigger);
Scheduler.AddGlobalJobListener(AutofacJobListener);
Scheduler.Start();
}