Hangfire任务超时。

3

我有一些工作在Hangfire中似乎处于“挂起”状态,可能运行数小时但实际上并没有执行任何操作。 Hangfire是否有一种方法可以在任务运行时间超过一定时间后终止该任务?

我正在SQL服务器上运行最新版本的Hangfire。


您可以通过编写作业过滤器为每个作业设置到期时间。在此处有详细说明:https://discuss.hangfire.io/t/how-to-configure-the-retention-time-of-job/34/2。使用"OnStateUnapplied()"为所有作业设置过期时间。 - Sujith
还有一个链接可以帮助您:https://dev59.com/SJ_ha4cB1Zd3GeqP0Iit - Sujith
2个回答

1
在您的作业创建中(无论是重复还是单个后台作业),调用时,像这样将类型为“IJobCancellationToken”的额外参数传递给作业方法:
public static void Method1(string param1, IJobCancellationToken token) { }

当您创建作业时,请使用空的IJobCancellationToken令牌值创建作业并保存jobId。再创建另一个循环作业来轮询这些作业,并在超过所需时间限制时简单地调用BackgroundJob.Delete(jobId)。这将清除Hangfire中的作业并终止服务器上的进程。
参考: https://discuss.hangfire.io/t/how-to-cancel-a-job/872

0

是的,你可以这样做,你需要在启动时设置FetchNextJobTimeout。通过设置FetchNextJobTimeout,您可以控制作业在Hangfire开始在另一个线程上再次执行之前可以运行多长时间。

services.AddHangfire(config => {
       config.UseMemoryStorage(new MemoryStorageOptions { FetchNextJobTimeout = TimeSpan.FromHours(24) });
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接