ThreadPool.QueueUserWorkItem() を使用して一部のバックグラウンド ワーカーを起動する ASP.Net アプリケーションがあります。ほとんどの場合、実行中のバックグラウンド スレッドはゼロですが、一度に最大 5 ~ 6 個のスレッドが実行される場合もあります。さらに、ほとんどは数秒以内に完了しますが、10 分も実行される可能性があります。
ASP.Net アプリケーションのシャットダウンを引き起こす可能性のあるさまざまなシナリオをすべて考えると、アプリケーションをシャットダウンする必要があり、処理の途中である場合は、可能であればこれらのバックグラウンド プロセスを正常に終了させたいと考えています。
アプリケーションがシャットダウンされているという呼び出しを受け取ってから数秒以内に作業を早期に停止し、クリーンアップするようにプロセスに通知する方法を作成する方法を作成する問題があまり発生しないと思います。誰かがこれについて具体的なアドバイスを持っているなら、私は確かにそれを感謝します.
私の2つの主な質問は次のとおりです。
1) バックグラウンド ワーカーに物事をまとめるように伝えるのに適切な時期はいつですか。Application_End 中? 廃棄()?または、おそらく私が気付いていない 3 番目のオプションです。
2) 上記のイベント中にプロセスが終了するのを待ってから戻る場合、Application_End をすぐに返さないと、バックグラウンド ジョブを適切にシャットダウンしないよりも、アプリケーションに深刻な問題が発生する可能性があります。
void Application_End(object sender, EventArgs e)
{
//if this for whatever reason takes a non-trivial time to execute, what problems could I encounter?
SignalBackgroundJobsAndWaitForThemToShutDown();
}
ありがとう!