I am looking at using Hangfire as a job scheduler for recurring jobs. So configuring them is simple with AddOrUpdate
, but then how do i delete it? I don't want to pollute my code with RecurringJob.RemoveIfExists()
when that job has been deleted and then have to remember to delete it later.
Is there a way to get a list of all recurring jobs and delete them when the server starts and so my code will re add them in every time? If not, if there a better way?
eg
Application version 1: Added new Hangfire recurring job Do something 1
Application version 2: Added new Hangfire recurring jobs Do something 2
and Do Something 3
Application version 3: Removed Hangfire recurring job Do something 2
Problem: the job will still exist on the server with error "Could not load type..." and needs to be deleted.
A bit late on this one but hopefully it will help someone else. I got stuck in the same situation. In the end the answer on HangFire recurring task data helped me out.
I use the JobStorage
to loop through all recurring jobs and remove each in turn as below:
using (var connection = JobStorage.Current.GetConnection())
{
foreach (var recurringJob in connection.GetRecurringJobs())
{
RecurringJob.RemoveIfExists(recurringJob.Id);
}
}
I am sure there is a nicer way out there but I couldn't find it
paul's answer was helpful but API api seems to have changed. Using Hangfire 1.6.20 I needed to get the recurring jobs from StorageConnectionExtensions
using (var connection = JobStorage.Current.GetConnection())
{
foreach (var recurringJob in StorageConnectionExtensions.GetRecurringJobs(connection))
{
RecurringJob.RemoveIfExists(recurringJob.Id);
}
}
according to hangfire docs
public static void RemoveIfExists(
string recurringJobId
)
with this method, you can pass the job id which you want to delete.
RecurringJob.RemoveIfExists("exampleClassName.exampleFunctionName");
In MongoDB, data about recurring job are stored in the hangfire.stateData
table. Clearing this table can help you.
You can use this code:
var recurringJobs = Hangfire.JobStorage.Current.GetConnection().GetRecurringJobs();
foreach (var item in recurringJobs)
{
RecurringJob.RemoveIfExists(item.Id);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.