在HangFire中设置"按需"唯一作业

Ask*_*ein 11 c# hangfire

在Hangfire中,我已经成功设置了定期作业,并且如果我愿意,我可以手动触发,这要归功于Web UI及其"触发器"按钮.

RecurringJob.AddOrUpdate(..);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

我想在await状态中添加一个非重新安排的Job,但是无法(听起来不对).

Hangfire可以"仅按需"工作吗?

Edw*_*win 15

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

RecurringJob.AddOrUpdate(() => ..., "0 0 31 2 0");
Run Code Online (Sandbox Code Playgroud)

它在仪表板中显示为:

下一次执行 N/A


Can*_*ale 9

在较新版本的 Hangfire 中,您可以简单地使用这个:

RecurringJob.AddOrUpdate(() => ..., Cron.Never());
Run Code Online (Sandbox Code Playgroud)

我知道这与上面所说的基本相同,但是 stackoverflow 不会让我发表评论,因为我的声誉仍然一无所有......


Hyl*_*ean 6

我使用这个CRON表达式为Never:0 0 29 2/12000 WED 午夜,2月29日恰好是每个世纪的星期三.

正如@youen发现的那样,这个表达式会产生更晚的日期."0 0 29 2/12000 MON"

  • 实际上,这个"0 0 29 2/12000 MON"将在四年之后(2044年)出现.有人可能会争辩说,今天制作的系统很少会在这个日期运行.虽然那些可能需要修复的那些,所以值得思考在那个日期不情愿地执行任务是多么重要(因为你不能正确地认为有人会记得在它发生之前及时更新它).这将是着名的"星期一二月二十九日"的错误,当时精通古董C#语言的人将获得财富来修复它. (2认同)

emm*_*uel 6

手动或“按需”尚未在主干中实施。但是,您可以使用此 fork来获得该选项。

目前这在Hangfire 的 repo 中被标记为 Work in Progress ,你可以这样使用它:

BackgroundJob.Stash(() => Console.WriteLine("STASHING"));
Run Code Online (Sandbox Code Playgroud)

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

BackgroundJob.Enqueue(() => Console.WriteLine("Simple!"));
Run Code Online (Sandbox Code Playgroud)

编辑:2017/12/28:

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

Hangfire.Core.Dashboard.Management

在此处输入图片说明