我正在考虑将Hangfire用作重复工作的作业调度程序。因此使用AddOrUpdate
配置它们很简单,但是我如何删除它?当该作业被删除后,我不想用RecurringJob.RemoveIfExists()
污染我的代码,然后必须记得稍后将其删除。
有没有办法获取所有定期作业的列表并在服务器启动时将其删除,因此我的代码每次都会重新添加它们?如果没有,是否有更好的方法?
e.g。
应用程序版本1:添加了新的Hangfire定期作业 Do something 1
应用程序版本2:添加了新的Hangfire定期作业 Do something 2
和 Do Something 3
应用程序版本3:删除了Hangfire定期作业 Do something 2
问题:作业仍然存在于服务器上,错误“无法加载类型...”,需要删除。
答案 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
表中的周期性作业存储的数据。清除此表可以帮助您