Frage

Ich mache einig Multi-Threading und Verwendung AutoResetEvents und ManualResetEvents wird mein Haupt steuern - Schleife. Wenn die Fäden „destryoing“ Ich muss auch diese Signale verfügen, das klar ist.

Aber ich sah verschiedene Möglichkeiten, wie waithandles zu entsorgen, und ich bin mir nicht sicher, welches ist richtig:

Version 1

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

Version 2

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

Version 3

if (disposing)
{
 this.threadExitEvent.Close();
 ....
}
War es hilfreich?

Lösung

Version 2 ist das, was ich mit gehen würde, wie es ist (vermutlich) keine Notwendigkeit, die neu angeordneten WaitHandle zu hängen, so dass es zu null Einstellung ist eine gute Idee. Dies macht es auch leichter, das Objekt anzupassen angeordnet erholen zu können, von zu sein, wie alles, was Sie tun müssen, ist, überprüfen, ob die WaitHandle null ist und neu erstellen, wenn so.

Das wird gesagt, niemand wird Ihre Hand zu schlagen, für 3 mit Option gehen.

Verwenden Sie Option nicht 1; es ist generell eine schlechte Idee zu „Reichweite innerhalb“ von Objekten und Entsorgung Mitglieder starten. Der Aufruf Close (da die Dispose Methode von IDisposable explizit implementiert ist und identische Code Close hat) kümmert sich automatisch um die SafeWaitHandle der Entsorgung. Tun Sie das nicht selbst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top