【问题标题】:Hangfire Job timoutHangfire 作业超时
【发布时间】:2017-06-28 20:53:43
【问题描述】:

我的某些工作在hangfire 中似乎“挂起”,可能会运行数小时,但实际上并没有做任何事情。如果 Hangfire 运行时间超过一定时间,有没有办法杀死工作?

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

【问题讨论】:

标签: hangfire


【解决方案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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-05-20
      • 1970-01-01
      • 2020-01-11
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      相关资源
      最近更新 更多