不同的RecurringJobs同时执行

时间:2017-05-11 07:11:04

标签: hangfire

我试图执行一个程序来更新我的数据库,但问题是我在不同的时间为它设置了不同的RecurringJobs。

今天当我检查了hangfire状态时,从昨天起我实例化了hangfire,我发现这个作业应该在昨天执行,而今天的一个任务,都是在30分钟前同时执行的,这就在数据库中创建了重复项。

你能帮我解决这个问题吗?

enter image description here

2 个答案:

答案 0 :(得分:1)

如果您的问题是并发问题,可以通过运行hangfire单线程来解决它。只需在启动时配置hangfire工作线程的数量:

var server = new BackgroundJobServer(new BackgroundJobServerOptions
                                         {
                                             WorkerCount = 1
                                         });

这将强制hangfire按顺序处理排队的作业。

或者,如果你有专业版的hangfire,你可以使用batch chaining控制订单。

  

我不知道工人是否可以被视为一个线程。

在一个hangfire工作者中,单线程代码将由一个线程

运行

答案 1 :(得分:0)

这看起来不像已建议的并发问题。目前还不完全清楚你要做什么,但我假设你希望这份工作能够在7点,12点45分和17点30分运行而且因为早上7点和17点半的工作同时进行而产生了问题(上午07点)。

根据创建的时间,您似乎在14:30左右创建了这些。这意味着17:30的工作应该已经开始,但直到第二天早上7点左右才开始。我最好的猜测是它在IIS中托管,并且网站应用程序池被回收。  这将导致任何应该运行的重复作业被延迟,直到应用程序池/站点再次启动(我假设是在早上7点左右)。

查看这些文档,了解如何确保您的网站始终正常运行:http://docs.hangfire.io/en/latest/deployment-to-production/making-aspnet-app-always-running.html

如果它不是IIS问题,必须导致BackgroundJobServer停止监视数据库的作业,直到~7:00am(服务器关闭,错误等)。