我想使用 Hangfire 每隔一定天数(在我的配置中指定)执行一个方法。问题是天数可以大于 31,据我所知,cron 表达式不支持大于此的天数间隔范围。
还有其他方法来处理这样的案例吗?或者我应该考虑使用其他东西来代替 Hangfire?
我尝试过
Cron.DayInterval(interval)
和 $"0 0 */{interval} * *"
但是当 interval
大于 31 时,我得到一个异常:CRON 表达式无效。
我也尝试过类似的事情:
if (interval <= 31)
{
return $"0 0 */{interval} * *";
}
else
{
int months = interval / 30;
return $"0 0 * */{months} *";
}
但这不是我真正需要的。
Hangfire 在底层使用 cron 表达式。例如,(已弃用的)
Cron.DayInterval(int interval)
方法扩展为$"0 0 */{interval} * *
,这意味着“每(间隔)”天运行一次。
由于 cron 表达式的“天”字段不能超过
31
,因此您无法安排所需的时间间隔。
不幸的是,Hangfire 没有公开任何用于调度作业的自定义点。
所以我的建议是这样的:
安排您的工作每天运行。当作业启动时,它会执行一些检查以确定它是否应该实际运行。
例如,如果您想每 31 天运行一次,那么您可以计算实际对应的一年中的哪几天(取决于您的开始日期)。