Как удалить все временные задания hangfire при запуске?
Я рассматриваю использование Hangfire как планировщика заданий для повторяющихся заданий. Так что их настройка проста с помощью AddOrUpdate
, но как я могу ее удалить? Я не хочу загрязнять свой код с помощью RecurringJob.RemoveIfExists()
, когда это задание было удалено, а затем нужно запомнить его позже.
Есть ли способ получить список всех повторяющихся заданий и удалить их при запуске сервера, и поэтому мой код будет добавлять их каждый раз? Если нет, если есть лучший способ?
например.
Версия приложения 1: добавлена новая повторяющаяся работа Hangfire Do something 1
Версия приложения 2: Добавлены новые повторяющиеся задания Hangfire Do something 2
и Do Something 3
Версия приложения 3: Устранено повторное задание Hangfire Do something 2
Проблема: задание будет по-прежнему существовать на сервере с ошибкой "Невозможно загрузить тип..." и его необходимо удалить.
Ответы
Ответ 1
Немного поздно, но, надеюсь, это поможет кому-то другому. Я застрял в той же ситуации. В итоге ответ на повторяющиеся данные задачи HangFire помог мне.
Я использую JobStorage
для циклического повторения всех повторяющихся заданий и поочередно удаляю их:
using (var connection = JobStorage.Current.GetConnection())
{
foreach (var recurringJob in connection.GetRecurringJobs())
{
RecurringJob.RemoveIfExists(recurringJob.Id);
}
}
Я уверен, что есть лучший выход, но я не мог найти его
Ответ 2
Пол был полезным, но API API, похоже, изменился. Используя Hangfire 1.6.20 мне нужно было получать повторяющиеся задания из StorageConnectionExtensions
using (var connection = JobStorage.Current.GetConnection())
{
foreach (var recurringJob in StorageConnectionExtensions.GetRecurringJobs(connection))
{
RecurringJob.RemoveIfExists(recurringJob.Id);
}
}
Ответ 3
Вы можете использовать этот код:
var recurringJobs = Hangfire.JobStorage.Current.GetConnection().GetRecurringJobs();
foreach (var item in recurringJobs)
{
RecurringJob.RemoveIfExists(item.Id);
}
Ответ 4
И есть ли способ удалить запланированные задачи, просто так?