如何设置Hangfire作业的最大运行时间?

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

运行 Hangfire 作业时,作业停止运行之前似乎没有最长运行时间。例如:以下代码将运行几个小时,没有任何问题,无需更改任何配置。

[HttpPost]
[Route("longJob")]
public IActionResult LongJob()
{
    BackgroundJob.Enqueue(() => LongHangfireJob());
    return Ok();
}

[NonAction]
public void LongHangfireJob()
{
    Thread.Sleep(25200000); //7 hours
}

但现在我想知道如何构建一些配置,以便作业在一段时间后停止运行,并且如果可能的话最好将状态设置为失败。

我已经尝试了几个选项,例如

[JobExpirationTimeout(hours: 4)]
[Timeout(hours: 4)]
我仅找到或由 ChatGPT 提供。另外,以下内容不起作用:

BackgroundJob.Enqueue(() => LongHangfireJob().WithTimeout(TimeSpan.Fromhours(4)));

是否有一个选项可以做到这一点(在 Hangfire 的免费计划中),或者这根本不是一个选项?

另外,我不是在谈论

CommandBatchMaxTimeout
SlidingInvisibilityTimeout
QueuePollInterval
,因为作业仍然可以运行超过这些选项中配置的时间跨度。

提前致谢。

c# asp.net timeout hangfire
2个回答
0
投票

有多种方法可以实现这一目标。但以下两种方法很容易开发。

  1. 执行此操作的一种方法是使用传递给的取消令牌 您的工作方法,并定期检查取消令牌 在作业中查看它是否已被取消。

  2. 您可以在作业定期检查的共享数据存储(例如数据库或缓存)中创建取消标志。如果 标志已设置,作业可以自行停止并提前退出。


0
投票

我是第一次使用hangfire,你知道默认运行时间是多少吗?

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