c# - 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 存储,Func
2 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(Action
2 回调,对象状态)!!!无法在资源“HangFire:locks:schedulepoller”上加锁:锁定超时。
所以,我想延迟方法初始化存在一些问题。有人可以帮我吗?可能我没有为 ASP.NET 核心正确设置 Hangfire。
解决方案
我解决了这个问题,如下所示。
Hangfire 表中有锁 表。我删除了锁表中的所有数据,我的问题解决了。
推荐阅读
- google-apps-script - 如何用另一个替换谷歌幻灯片中的视频(或简单地替换 URL)
- r - 格式化文本输入
- java - TestNG - 如何将变量的值作为 dataProvider 名称传递?
- ruby-on-rails - Rails 5:通过多选创建多个连接表项
- amazon-web-services - 使用 AWS CDK 设置 CloudFrontWebDistribution 以从 S3 存储桶获取 /subdirectory server /subdirectory/index.html
- ruby-on-rails - NoMethodError:访问属性时 ActiveRecord 中的私有方法“y”
- javascript - 过滤 DIV 元素后滚动到顶部?
- c# - 组合框返回 System.Data.Entity.DynamicProxies.x
- c# - 特定于 WPF 信息亭应用程序 C# 的光标速度
- less - 更少的导入路径——它在哪里找到库?