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

问题描述 投票:20回答:3

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

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

EG

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

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

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

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

c# recurring hangfire
3个回答
47
投票

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

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

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

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


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);
    }
}

0
投票

您可以使用此代码:

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

            foreach (var item in recurringJobs)
            {
                RecurringJob.RemoveIfExists(item.Id);
            }
© www.soinside.com 2019 - 2024. All rights reserved.