私の ASP.NET MVC アプリケーションでは、バックグラウンド タスクを実行し、10 分ほどかかることもあります。この件について読んだところ、アプリ ドメインが再起動してスレッドが削除されることがあることがわかりました。
したがって、いくつかの解決策を調べました。私が見つけた主な解決策はHangfireです。失敗した場合などにジョブを再起動することは理解していますが、アプリドメインの再起動を何らかの形で「バイパス」するか、その場合にジョブを再起動するだけですか?
私の ASP.NET MVC アプリケーションでは、バックグラウンド タスクを実行し、10 分ほどかかることもあります。この件について読んだところ、アプリ ドメインが再起動してスレッドが削除されることがあることがわかりました。
したがって、いくつかの解決策を調べました。私が見つけた主な解決策はHangfireです。失敗した場合などにジョブを再起動することは理解していますが、アプリドメインの再起動を何らかの形で「バイパス」するか、その場合にジョブを再起動するだけですか?
私が見つけた主な解決策は Hangfire です。失敗した場合などにジョブを再起動することは理解していますが、アプリドメインの再起動を何らかの形で「バイパス」するか、その場合にジョブを再起動するだけですか?
いいえ、アプリ ドメインの再起動をバイパスしません。バイパスできるものは何もありません。ドキュメントからの引用:
Hangfire は、永続ストレージ内の処理に関連するバックグラウンド ジョブやその他の情報を保持します。永続性は、バックグラウンド ジョブがアプリケーションの再起動、サーバーの再起動などで存続するのに役立ちます。これが、CLR のスレッド プールと Hangfire を使用したバックグラウンド ジョブの実行の主な違いです。さまざまなストレージ バックエンドがサポートされています。
したがって、新しいタスクをキューに入れるときは、最初にそれをメモリに保持せずに、サーバー上の永続的なストレージに格納する必要があります。これにより、アプリ ドメインが停止した場合でも、後でこの永続ストレージからタスクを読み取って再開できます。