如何从日期开始每 14 天执行一次 Hangfire 作业
How to execute a Hangfire job every 14 days starting from a date
我可以使用 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 class,但它没有支持的方法:
Hangfire 上是否有另一个 class 来完成这项工作?
另一种方法是每周做一份工作,然后
- 传递自定义参数
- 如果需要执行则签入方法(根据与上次执行的日期差异)
- 如果日期差异不是 14 天则跳过
但如果有更好的方法,我真的不想那样做。
您需要创建一个如下所示的 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
我可以使用 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 class,但它没有支持的方法:
Hangfire 上是否有另一个 class 来完成这项工作?
另一种方法是每周做一份工作,然后
- 传递自定义参数
- 如果需要执行则签入方法(根据与上次执行的日期差异)
- 如果日期差异不是 14 天则跳过
但如果有更好的方法,我真的不想那样做。
您需要创建一个如下所示的 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