Domanda

che sto facendo alcuni multi-threading e sull'uso AutoResetEvents e ManualResetEvents non controllare il mio principale - loop. Quando "destryoing" i fili devo anche disporre questi segnali, che è chiaro.

Ma ho visto diversi modi come smaltire Waithandles, e non sono sicuro che uno è corretto:

Versione 1

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

La versione 2

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

Versione 3

if (disposing)
{
 this.threadExitEvent.Close();
 ....
}
È stato utile?

Soluzione

La versione 2 è quello che mi piacerebbe andare con, in quanto c'è (presumibilmente) non c'è bisogno di appendere al vostro WaitHandle appena disposti, in modo impostazione a null è una buona idea. Questo rende anche più facile adattare l'oggetto essere in grado di recuperare da essere disposti, come tutto ciò che dovete fare è controllare per vedere se il WaitHandle è nullo e ricrearlo in caso affermativo.

Detto questo, nessuno sta andando a schiaffeggiare la mano per andare con l'opzione 3.

Non utilizzare l'opzione 1; è generalmente una cattiva idea di "portata dentro" di oggetti e iniziare membri smaltimento. Chiamando Close (dato che il metodo Dispose da IDisposable è esplicitamente implementato e ha un codice identico a Close) prende automaticamente la cura dello smaltimento dei SafeWaitHandle. Non farlo da soli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top