如何在启动时删除所有hangfire重复工作?

lah*_*rah 23 c# recurring hangfire

我正在考虑使用Hangfire作为重复工作的作业调度程序.所以配置它们很简单AddOrUpdate,但是我该如何删除呢?我不希望RecurringJob.RemoveIfExists()在删除该作业时污染我的代码,然后必须记住以后删除它.

有没有办法获取所有定期作业的列表并在服务器启动时删除它们,因此我的代码每次都会重新添加它们?如果没有,如果有更好的方法?

例如

应用程序版本1:添加了新的Hangfire定期作业 Do something 1

应用程序版本2:添加了新的Hangfire定期作业Do something 2Do Something 3

应用程序版本3:删除了Hangfire定期作业 Do something 2

问题:作业仍将存在于服务器上,并显示"无法加载类型..."错误,需要删除.

小智 52

这个有点晚了,但希望它会帮助别人.我遇到了同样的情况.最后,关于HangFire重复任务数据的答案帮助了我.

我使用JobStorage循环遍历所有重复的作业并依次删除每个作业,如下所示:

using (var connection = JobStorage.Current.GetConnection())
{
    foreach (var recurringJob in connection.GetRecurringJobs())
    {
        RecurringJob.RemoveIfExists(recurringJob.Id);
    }
}
Run Code Online (Sandbox Code Playgroud)

我相信有一个更好的方式,但我找不到它

  • 这个答案已经过时了。 (3认同)

小智 8

保罗的回答很有帮助,但API api似乎已经改变了.使用Hangfire 1.6.20我需要从中获得定期工作StorageConnectionExtensions

using (var connection = JobStorage.Current.GetConnection()) 
{
    foreach (var recurringJob in StorageConnectionExtensions.GetRecurringJobs(connection)) 
    {
        RecurringJob.RemoveIfExists(recurringJob.Id);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 由于 StorageConnectionExtensions 类是不言自明的,因此 GetRecurringJobs() 方法是 Connection 对象的扩展方法,因此无需通过静态扩展类调用它,而是使用 connection.GetRecurringJobs() 。 (5认同)
  • 需要在文件顶部添加一个 `using Hangfire.Storage`,但是是的,这就是我删除所有重复性作业所需要的。谢谢! (2认同)