5

私はいくつかのマルチスレッドを行っており、AutoResetEvents と ManualResetEvents を使用してメインループを制御しています。スレッドを「破棄」するとき、これらのシグナルも破棄する必要があることは明らかです。

しかし、Waithandles を破棄するさまざまな方法を見ましたが、どれが正しいかわかりません。

バージョン 1

if (disposing)
{
 this.threadExitEvent.SafeWaitHandle.Dispose();
 this.threadExitEvent.Close();
 this.threadExitEvent = null;
 ....
}

バージョン 2

if (disposing)
{
 this.threadExitEvent.Close();
 this.threadExitEvent = null;
 ....
}

バージョン 3

if (disposing)
{
 this.threadExitEvent.Close();
 ....
}
4

1 に答える 1

6

バージョン 2 は、(おそらく) 新しく破棄された にしがみつく必要がないため、私が使用するものです。WaitHandleそのため、に設定することをnullお勧めします。これにより、破棄されたオブジェクトを回復できるようにすることも容易になります。これは、WaitHandleが null かどうかを確認し、そうであれば再作成するだけでよいためです。

そうは言っても、オプション 3 を選択したとしても、誰も手を叩くことはありません。

オプション 1 は使用しないでください。一般に、オブジェクトの「内部に到達」してメンバーの破棄を開始するのは悪い考えです。を呼び出すとClose( からのDisposeメソッドIDisposableが明示的に実装され、 と同じコードを持っているためClose)、 . の破棄が自動的に処理されSafeWaitHandleます。自分でやらないでください。

于 2010-04-27T14:52:05.500 に答える