首页 > 解决方案 > Hangfire:延迟调用方法不起作用

问题描述

我有一个 ASP.NET 核心应用程序,并希望将 Hangfire 用于一些后台任务。我按照官方文档中的描述设置了 Hangfire,我可以调用通常的后台任务。但是,我在延迟调用这些方法时遇到了问题。

public void Configure(/*other params*/ IBackgroundJobClient backgroundJobsClient)
{
   //Other code
   
   backgroundJobsClient.Enqueue(() => Console.WriteLine("Method"));
   backgroundJobsClient.Schedule(() => Console.WriteLine("Delayed Method"), TimeSpan.FromSeconds(2));
}

我在控制台中只有“方法”输出。

等待一分钟后,我的控制台出现异常:

Hangfire.Processing.BackgroundExecution[0] Execution DelayedJobScheduler 由于异常现在处于失败状态,将在 00:00:04 重试执行 Hangfire.PostgreSql.PostgreSqlDistributedLockException: 无法锁定资源“HangFire” :locks:schedulepoller': 锁定超时。在 Hangfire.PostgreSql.PostgreSqlDistributedLock..ctor(字符串资源,TimeSpan 超时,IDbConnection 连接,PostgreSqlStorageOptions 选项)在 Hangfire.PostgreSql.PostgreSqlConnection 的 Hangfire.PostgreSql.PostgreSqlDistributedLock.PostgreSqlDistributedLock_Init_Transaction(字符串资源,TimeSpan 超时,IDbConnection 连接,PostgreSqlStorageOptions 选项)。在 Hangfire.Server.DelayedJobScheduler.UseConnectionDistributedLock[T](JobStorage 存储,Func2 action) at Hangfire.Server.DelayedJobScheduler.EnqueueNextScheduledJobs(BackgroundProcessContext context) at Hangfire.Server.DelayedJobScheduler.Execute(BackgroundProcessContext context) at Hangfire.Server.BackgroundProcessDispatcherBuilder.ExecuteProcess(Guid executionId, Object state) at Hangfire.Processing.BackgroundExecution.Run(Action2 回调,对象状态)!!!无法在资源“HangFire:locks:schedulepoller”上加锁:锁定超时。

所以,我想延迟方法初始化存在一些问题。有人可以帮我吗?可能我没有为 ASP.NET 核心正确设置 Hangfire。

标签: c#.netpostgresqlasp.net-corehangfire

解决方案


我解决了这个问题,如下所示。

Hangfire 表中有 。我删除了锁表中的所有数据,我的问题解决了。


推荐阅读