在 Hangfire 中,我已经成功设置了重复作业,并且可以根据需要手动触发,这要归功于 Web UI 及其“触发”按钮。
RecurringJob.AddOrUpdate(..);
但我愿意安排一份永远不会自动解雇的工作。仅根据 WebUi 的要求。将其视为一组仅在需要时触发的维护任务。手动。
我正在考虑在等待状态下添加一个非重复作业,但没能做到(而且听起来是错误的)。
Hangfire 是否可以实现“仅按需”工作?
我用过这个(.net 4.6.2 上的hangfire 1.7)
RecurringJob.AddOrUpdate(() => ..., "0 0 31 2 0");
它在仪表板中显示为:
下次执行 N/A
在较新版本的 Hangfire 中,您可以简单地使用这个:
RecurringJob.AddOrUpdate(() => ..., Cron.Never());
我将此 CRON 表达式用作 Never:0 0 29 2/12000 WED 2 月 29 日午夜,恰好是每个世纪的星期三。
@youen 发现,这个表达式产生一个较晚的日期。 “0 0 29 2/12000 星期一”
手动或“按需”尚未在主干中实施。但是,您可以使用此叉子来获得该选项。
目前,这在 Hangfire 的存储库中被标记为“正在进行中”,您可以这样使用它:
BackgroundJob.Stash(() => Console.WriteLine("STASHING"));
其中一条评论中提到的另一种方法是在站点中的某个位置放置一个将作业排队的按钮:
BackgroundJob.Enqueue(() => Console.WriteLine("Simple!"));
编辑:2017/12/28:
显然之前的 fork 不会被合并回来,因为这个扩展已经支持手动排队作业:
是的,通过hangfire 完全可以实现按需工作。您可以使用以下方法触发“即发即忘”作业:
BackgroundJob.Enqueue(
() => Console.WriteLine("Simple!"));
然而,这不会出现在hangfire仪表板中,但您可以在代码中使用上面的代码片段(也许在单击按钮后?)