在 HangFire 中设置一个仅 "on demand" 的作业

Set an "on demand" only job in HangFire

在 Hangfire 中,我已经成功地设置了循环作业,如果我愿意,我可以手动触发,这要感谢 Web UI 及其 "trigger" 按钮。

RecurringJob.AddOrUpdate(..);

但我愿意设置一份永远不会自动解雇的工作。仅根据 WebUi 的要求。将其视为仅在需要时触发的一组维护任务。手动。

我想在等待状态下添加一个非重复作业,但没能做到(这听起来不对)。

"On demand only" 个工作可以用 Hangfire 实现吗?

是的,hangfire 完全可以实现按需工作。您可以使用以下方式触发即发即弃作业:

BackgroundJob.Enqueue(
() => Console.WriteLine("Simple!"));

然而,这不会出现在 hangfire 仪表板中,但您可以在代码中使用上面的代码片段(也许在单击按钮之后?)

我将此 CRON 表达式用作从不:0 0 29 2/12000 WED 午夜,2月29日恰好是每个世纪的星期三。

正如@youen 发现的那样,这个表达式产生了一个较晚的日期。 “0 0 29 2/12000 星期一”

手动或"on demand"尚未在主干中实施。但是,您可以 use this fork 获得该选项。

目前这在 Hangfire's repo 中被标记为正在进行中,您可以这样使用它:

BackgroundJob.Stash(() => Console.WriteLine("STASHING"));

其中一条评论中提到的另一种方法是在您网站的某处设置一个用于将作业排入队列的按钮:

BackgroundJob.Enqueue(() => Console.WriteLine("Simple!"));

编辑:2017/12/28:

显然之前的分支不会被合并回来,因为这个扩展已经支持手动排队作业:

Hangfire.Core.Dashboard.Management

我用过这个(.net 4.6.2 上的 hangfire 1.7)

RecurringJob.AddOrUpdate(() => ..., "0 0 31 2 0");

它在仪表板中显示为:

Next execution N/A