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