Hangfire 每隔一定天数(大于 31)执行一次重复作业

问题描述 投票:0回答:1

我想使用 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} *";
}

但这不是我真正需要的。

c# asp.net-core background-process hangfire
1个回答
0
投票

Hangfire 在底层使用 cron 表达式。例如,(已弃用的)

Cron.DayInterval(int interval)
方法扩展为
$"0 0 */{interval} * *
,这意味着“每(间隔)”天运行一次。

由于 cron 表达式的“天”字段不能超过

31
,因此您无法安排所需的时间间隔。

不幸的是,Hangfire 没有公开任何用于调度作业的自定义点。

所以我的建议是这样的:

安排您的工作每天运行。当作业启动时,它会执行一些检查以确定它是否应该实际运行。

例如,如果您想每 31 天运行一次,那么您可以计算实际对应的一年中的哪几天(取决于您的开始日期)。

© www.soinside.com 2019 - 2024. All rights reserved.