Wie zu entsorgen ein Waithandle korrekt
-
01-10-2019 - |
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();
....
}
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.