WaitHandle一部のオブジェクトが への現在のブロッキング呼び出しの状態にある可能性がある間に、アプリケーションを「きれいに」閉じる標準的な方法はありWaitOneますか?
たとえば、次のようなメソッドでスピンしているバックグラウンド スレッドがある場合があります。
while (_request.WaitOne())
{
try
{
_workItem.Invoke();
}
finally
{
OnWorkCompleted();
}
}
呼び出しなしでこのスレッドを破棄する明確な方法Thread.Abortはありません (私が理解していることから、これはお勧めできません)。ただし、オブジェクト ( )を呼び出すCloseと、例外がスローされます。_requestAutoResetEvent
現在、このループを実行しているスレッドのIsBackgroundプロパティは に設定されてtrueいるため、アプリケーションは適切に閉じているように見えます。ただし、WaitHandle実装されているためIDisposable、これがコーシャと見なされるのか、アプリが終了する前にそのオブジェクトを本当に破棄する必要があるのか はわかりません。
これはデザインが悪いのでしょうか?そうでない場合、このシナリオは通常どのように処理されますか?