Как заставить 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 раз.

Как мне настроить Scheduler, Job и Trigger, чтобы сделать это?


person aminexplo    schedule 05.12.2016    source источник


Ответы (2)


Вы можете сделать это, сохранив оставшееся количество между выполнением программы:

  • в программе «Остановить» сохранить оставшееся количество во внешнем хранилище (файл, БД и т. д.). На самом деле лучше всего делать это после каждого выполнения задания.
  • в программе "Пуск" прочитать значение из хранилища и использовать его в .WithRepeatCount() вместо константы.
person Set    schedule 05.12.2016
comment
Спасибо, но я ищу решение, встроенное в Quartz.net. Я не хочу заниматься сохранением и восстановлением номеров. Более того, допустим, может произойти отключение электроэнергии, и я не могу обнаружить программу Stop. Я должен сохранять количество выполнений на задание после каждого цикла в своей собственной БД, и это как-то раздражает. в любом случае я проголосовал за ваш ответ. Любые лучшие решения будут оценены. - person aminexplo; 06.12.2016

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

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

https://github.com/Leftyx/QuartzNetAdoJobStoreSQLite

person mfatih    schedule 05.12.2016