Как удалить все повторяющиеся задания зависания при запуске?

Я собираюсь использовать Hangfire в качестве планировщика повторяющихся заданий. Так что настроить их просто с помощью AddOrUpdate, но как тогда его удалить? Я не хочу засорять свой код RecurringJob.RemoveIfExists(), когда это задание было удалено, а потом не забыть удалить его позже.

Есть ли способ получить список всех повторяющихся заданий и удалить их при запуске сервера, чтобы мой код каждый раз добавлял их заново? Если нет, есть ли способ лучше?

e.g.

Версия приложения 1: добавлено новое повторяющееся задание Hangfire Do something 1

Версия приложения 2: добавлены новые повторяющиеся задания Hangfire Do something 2 и Do Something 3.

Версия приложения 3: удалено повторяющееся задание Hangfire Do something 2

Проблема: задание по-прежнему существует на сервере с ошибкой «Не удалось загрузить тип ...», и его необходимо удалить.


person lahsrah    schedule 27.10.2016    source источник


Ответы (4)


Немного поздно, но, надеюсь, это поможет кому-то другому. Я застрял в такой же ситуации. В конце концов, мне помог ответ на повторяющихся задач HangFire.

Я использую JobStorage для перебора всех повторяющихся заданий и удаляю их по очереди, как показано ниже:

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

Я уверен, что есть способ получше, но я не смог его найти

person paul    schedule 12.12.2016
comment
Этот ответ устарел. - person Chris Weber; 24.06.2020
comment
@ChrisWeber, он работает с версией 1.7.18, последней на данный момент. Я только вставил код, никаких изменений не внес. - person Paul-Sebastian Manole; 29.12.2020

ответ Пола был полезен, но API api, похоже, изменился. Используя Hangfire 1.6.20, мне нужно было получать повторяющиеся задания от StorageConnectionExtensions

using (var connection = JobStorage.Current.GetConnection()) 
{
    foreach (var recurringJob in StorageConnectionExtensions.GetRecurringJobs(connection)) 
    {
        RecurringJob.RemoveIfExists(recurringJob.Id);
    }
}
person nevh    schedule 31.10.2018
comment
Нужно добавить using Hangfire.Storage вверху файла, но да, это то, что мне нужно, чтобы отбросить все повторяющиеся задания. Спасибо! - person Gary Rogers; 27.12.2018
comment
Поскольку класс StorageConnectionExtensions не требует пояснений, метод GetRecurringJobs () является методом расширения объекта Connection, поэтому нет необходимости вызывать его через класс статического расширения, вместо этого используйте connection.GetRecurringJobs (). - person Francesco; 31.03.2020

В MongoDB данные о повторяющихся заданиях хранятся в таблице hangfire.stateData. Очистка этой таблицы может вам помочь.

person Arseniy Lebedev    schedule 09.12.2019

Вы можете использовать этот код:

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

            foreach (var item in recurringJobs)
            {
                RecurringJob.RemoveIfExists(item.Id);
            }
person Abdus Salam Azad    schedule 14.10.2018
comment
Дубликат принятого ответа - person janv8000; 05.06.2020