В Кварц. NET, есть ли способ установить свойство, которое позволит запускать только один экземпляр задания?

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

Пример сценария

  • У меня есть задание X, я собираю файлы и запускается Quartz каждую минуту.
  • Задание X обычно может обработать 100 файлов за 1 минуту, все, что превышает 100 файлов, займет больше 1 минуты.
  • С момента последнего выполнения оказалось 150 файлов, поэтому задание X запускается и начинает обработку. По истечении 1 минуты обработано 100 файлов, остается 50 файлов, и задание X продолжает выполняться.
  • Однако запускается второй экземпляр задания X, потому что триггер срабатывает каждую минуту.
  • Теперь у меня есть 2 экземпляра. задания X, собирающего те же 50 файлов.

Есть ли способ подключить Quartz.NET, чтобы разрешить только 1 экземпляр задания? Я согласен со вторым триггером, ожидающим завершения первого, или я также согласен с возможностью пропуска второго триггера, поскольку он сработает снова через минуту.



Я взглянул на 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();
}

33
задан Mark 12 May 2011 в 20:48
поделиться