web-dev-qa-db-ja.com

起動時にすべてのハングファイアー繰り返しジョブを削除する方法は?

Hangfireを定期的なジョブのジョブスケジューラとして使用することを検討しています。したがって、AddOrUpdateを使用してそれらを構成するのは簡単ですが、それからどのように削除しますか?ジョブが削除されたときにRecurringJob.RemoveIfExists()でコードを汚染したくないので、後で削除することを忘れないでください。

すべての定期的なジョブのリストを取得し、サーバーの起動時にそれらを削除する方法はありますか?私のコードは毎回それらを追加しますか?そうでない場合、より良い方法がありますか?

例えば.

アプリケーションバージョン1:新しいHangfire定期ジョブを追加Do something 1

アプリケーションバージョン2:新しいHangfire定期ジョブを追加Do something 2およびDo Something 3

アプリケーションバージョン3:Hangfireの定期ジョブを削除Do something 2

問題:エラーは「タイプをロードできませんでした...」というエラーが発生しているため、削除する必要があります。

22
lahsrah

これには少し遅れましたが、うまくいけば他の人に役立つでしょう。私は同じ状況で立ち往生しました。最後に HangFireの定期的なタスクデータ の答えが私を助けてくれました。

JobStorageを使用して、繰り返し発生するすべてのジョブをループ処理し、次のようにそれぞれを順番に削除します。

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

もっと良い方法があるとは思いますが、見つけられませんでした

49
paul

paulの答え は役に立ちましたが、API APIは変更されたようです。 Hangfire 1.6.20を使用して、StorageConnectionExtensionsから繰り返しジョブを取得する必要がありました

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

次のコードを使用できます。

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

            foreach (var item in recurringJobs)
            {
                RecurringJob.RemoveIfExists(item.Id);
            }
0