我目前使用Hangfire版本1.6.19与MongoDB作为存储,遇到了问题。我们有一个按以下方式调度的方法:
BackgroundJob.Schedule(() => DoAsyncTask(parameters, JobCancellationToken.Null), TimeSpan.FromMinutes(X))
这个任务将运行一个多小时,其中包含一个循环来验证作业是否已完成。在循环内部,会调用cancellationToken.ThrowIfCancellationRequested()来验证是否已请求取消,但是此调用在执行约30分钟后不断被触发,并在作业完成之前终止了作业。
我一直在寻找有关此问题的信息,但大部分与旧版本或InvisibilityTimeout的使用有关,根据这个答案,它已经被弃用,因此我想知道是否有其他人遇到过这个问题以及任何可能的解决方案。
谢谢
编辑:经过进一步调查,我发现取消问题只是HangFire再次调用任务的副作用,而这次调用发生在运行30分钟后。由于我在方法中设置了验证以避免在进程仍在运行时重新进入(以避免数据重复),因此该进程将被视为已完成并因此被取消。
所以我面临的真正问题是我无法确定为什么HangFire在执行约30分钟后会再次调用进程,我按照这里描述的步骤在IIS上设置应用程序始终运行并防止池被回收,但行为仍然存在。
hangfire.console
中添加更多关于问题的细节。 - helcode