Hangfire 同时执行的不同重复作业

Hangfire 同时执行的不同重复作业,hangfire,Hangfire,我试图执行一个进程来更新我的数据库,但问题是我在不同的时间为它设置了不同的RecurringJobs 今天,当我检查hangfire状态时,由于昨天我实例化了hangfire,我发现作业应该在昨天执行,而今天的一个任务都是在30分钟前同时执行的,这在数据库中创建了重复项 你能帮我吗 如果您的问题是并发性问题,可以通过运行hangfire单线程来解决。只需在启动时配置hangfire工作线程的数量: var server = new BackgroundJobServer(new Backgrou

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

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

你能帮我吗


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

var server = new BackgroundJobServer(new BackgroundJobServerOptions
                                         {
                                             WorkerCount = 1
                                         });
这将强制hangfire按顺序处理排队的作业

或者,如果您有专业版的hangfire,您可以使用来控制订单

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


在hangfire worker中,单线程代码将只由一个线程运行

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

var server = new BackgroundJobServer(new BackgroundJobServerOptions
                                         {
                                             WorkerCount = 1
                                         });
这将强制hangfire按顺序处理排队的作业

或者,如果您有专业版的hangfire,您可以使用来控制订单

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


在hangfire worker中,单线程代码将只由一个线程运行

这看起来不像是建议的并发问题。现在还不完全清楚您想做什么,但我假设您希望作业在7、12:45和17:30运行,并且出现问题,因为上午7点和17:30作业同时运行(上午7点)

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

查看以下文档,了解如何确保网站始终运行:


如果不是IIS问题,则一定是某些原因导致BackgroundJobServer在早上7:00之前停止监视数据库中的作业(服务器关闭、错误等)。

这看起来不像是建议的并发性问题。现在还不完全清楚您想做什么,但我假设您希望作业在7、12:45和17:30运行,并且出现问题,因为上午7点和17:30作业同时运行(上午7点)

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

查看以下文档,了解如何确保网站始终运行:


如果不是IIS问题,则一定是什么原因导致BackgroundJobServer在~7:00am之前停止监视数据库中的作业(服务器关闭、错误等)。

Perfect我会尝试。如果我使用监视器会有帮助?@josemartin-什么是监视器?我的意思是锁,以避免不同线程中的并发。我不知道工作线程是否可以被视为线程。@JoseMMartin-在工作线程中,单线程代码只由一个线程运行。很好,我会试试。如果我使用监视器会有帮助?@josemartin-什么是监视器?我的意思是锁,以避免不同线程中的并发。我不知道工作线程是否可以被视为线程。@JoseMMartin-在工作线程中,单线程代码只能由一个线程运行。