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

时间:2016-10-27 06:13:41

标签: c# recurring hangfire

我正在考虑将Hangfire用作重复工作的作业调度程序。因此使用AddOrUpdate配置它们很简单,但是我如何删除它?当该作业被删除后,我不想用RecurringJob.RemoveIfExists()污染我的代码,然后必须记得稍后将其删除。

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

e.g。

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

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

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

问题:作业仍然存在于服务器上,错误“无法加载类型...”,需要删除。

4 个答案:

答案 0 :(得分:47)

这个有点晚了,但希望它会帮助别人。我遇到了同样的情况。最后,HangFire recurring task data上的答案帮助了我。

我使用JobStorage循环浏览所有定期作业,然后依次删除每个作业:

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

我相信有更好的方法,但我无法找到它

答案 1 :(得分:6)

paul's answer很有帮助,但API api似乎已更改。使用Hangfire 1.6.20,我需要从StorageConnectionExtensions

获得周期性工作
using (var connection = JobStorage.Current.GetConnection()) 
{
    foreach (var recurringJob in StorageConnectionExtensions.GetRecurringJobs(connection)) 
    {
        RecurringJob.RemoveIfExists(recurringJob.Id);
    }
}

答案 2 :(得分:0)

您可以使用以下代码:

var recurringJobs = Hangfire.JobStorage.Current.GetConnection().GetRecurringJobs();

            foreach (var item in recurringJobs)
            {
                RecurringJob.RemoveIfExists(item.Id);
            }

答案 3 :(得分:0)

在mongoDB中,有关hangfire.stateData表中的周期性作业存储的数据。清除此表可以帮助您