Повторяющееся задание с задержкой

Я использую версию Hangfire "1.6.8". Я хочу создать повторяющуюся работу с Cron.Daily после определенного DateTime . Возможно ли создать повторяющееся задание с задержкой?

заранее спасибо


person sujan maharjan    schedule 18.04.2017    source источник
comment
Вы можете использовать Cron.Daily(time.Hours, time.Minutes); - выполнять ежедневную работу в определенное время   -  person Sergey    schedule 18.04.2017


Ответы (2)


Я не могу придумать какой-либо особенно чистый способ сделать это.

Вы можете изучить возможность использования запланированного задания Hangfire для создания RecurringJob:

new BackgroundJobClient().Schedule(() => Hangfire.RecurringJob.AddOrUpdate(() => Console.WriteLine("Hello World"), Cron.Daily()), startDateTime)

Который может быть настроен на запуск запланированного задания незадолго до первого ожидаемого времени выполнения повторяющегося задания, и, таким образом, Hangfire запускает расписание и создает само задание. На самом деле я никогда не пытался это сделать, поэтому, пожалуйста, проверьте это (и дайте мне знать, как это работает).

person MarkFl    schedule 18.04.2017
comment
Я вижу, вы приняли мой ответ, значит ли это, что это сработало? Как прошло? Есть ли у вас какие-либо более конкретные детали реализации для тех, кто следует за вами? - person MarkFl; 21.04.2017
comment
Я попробовал это, и я получаю это исключение: System.NotSupportedException: «Анонимные функции, делегаты и лямбда-выражения не поддерживаются в параметрах метода задания: очень сложно сериализовать их и всю их область в целом». - person adam.bielasty; 03.05.2017
comment
@adam.bielasty У меня тоже такая проблема! - person Reza M.A; 06.08.2018

Из документов HangFire можно использовать выражения CRON. Сначала их немного сложно подобрать, но как только вы освоитесь со структурой, вы сможете делать все, что ищете. Обратите внимание, что это точное время, и нет никакого «когда вам захочется после этого времени». Скажите ему, когда вы хотите, чтобы он работал.

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

RecurringJob.AddOrUpdate(() => Console.Write("Powerful!"), "0 14 * * *");
  • _20 минут
  • 14: 14:00 (14:00)
  • *: каждый день месяца
  • *: Каждый месяц года
  • *: Каждый день недели.
person krillgar    schedule 18.04.2017
comment
Думаю, ОП искал что-то вроде делать каждый день в 14:00... начиная через x дней. К сожалению, нет выражения CRON для такого рода вещей, отсюда и идея планирования мета-задания (выполнять через x дней) обычного задания (каждый день в 14:00). - person ne1410s; 28.01.2021