Как выполнять задание Hangfire каждые 14 дней, начиная с даты - PullRequest
0 голосов
/ 03 декабря 2018

Я могу войти в двухнедельную работу, используя Hangfire,

if (vm.ReportInterval == 14)
                        {
                            reportFrequency = Cron.DayInterval(14);
                        }

Это работает и делает то, что должен.

Но я хочу запуститьзадание на определенную дату, а затем повторять каждые 14 дней.

По сути, необходимо передать второй параметр в cron.DayInterval.

Пример (это не поддерживается):

 if (vm.ReportInterval == 14)
               {
                  reportFrequency = Cron.DayInterval(14,new DateTime(2018,17,05));
               }

Я посмотрел на класс Cron, и у него нет поддерживаемого метода для этого:

enter image description here

Есть ли другой класс на Hangfire, чтобы сделатьзадание?

Другой способ - выполнить еженедельную работу, а затем

  • Передать пользовательские параметры
  • Проверить метод, если необходимо выполнить (по разнице в дате)с последнего исполнения)
  • Пропустить, если разность Даты не 14 дней

Но я действительно не хочу идти по этому пути, если есть лучший подход.

1 Ответ

0 голосов
/ 04 декабря 2018

Вам необходимо создать RecurringJob, который выглядит следующим образом:

RecurringJob.AddOrUpdate<IExportService>(
            "Export data",
            x => x.ExportToEmail(),
            "0 0 0 1/14 * ? *");

Важным битом является последний параметр, который является выражением cron, которое говорит:

Run this job At 00:00:00am, every 14 days starting on the 1st, every month

Если вы хотитедля создания другого выражения cron я бы предложил этот онлайн-генератор:

https://www.freeformatter.com/cron-expression-generator-quartz.html

...