Как заставить 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() вместо постоянного.

Убедитесь, что объекты базы данных созданы, и настройте хранилища заданий.

Посмотри этот пример. Это может помочь вам.

https://github.com/Leftyx/QuartzNetAdoJobStoreSQLite

Другие вопросы по тегам