Pregunta

Estoy haciendo algunas AutoResetEvents y ManualResetEvents multi-threading y el uso no controlar mi principal - bucle. Cuando "destryoing" los hilos también tengo que desechar estas señales, eso está claro.

Pero vi diferentes maneras de cómo desechar Waithandles, y no estoy seguro de cuál es la correcta:

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();
 ....
}
¿Fue útil?

Solución

La versión 2 es lo que me gustaría ir con, ya que hay (probablemente) no hay necesidad de aferrarse a su WaitHandle recién dispuesto, por lo que establecer a null es una buena idea. Esto también hace que sea más fácil de adaptar su objeto es capaz de recuperarse de estar dispuesto, como todo lo que tiene que hacer es comprobar para ver si el WaitHandle es nula y volver a crearlo si es así.

Una vez dicho esto, nadie va a abofetear a su lado para ir con la opción 3.

No utilice la opción 1 no; por lo general es una mala idea "dentro de alcance" de los objetos y empezar a miembros de desecharlas. Llamando Close (ya que el método de Dispose IDisposable está implementado de forma explícita y tiene código idéntico al Close) se encarga automáticamente de la eliminación de la SafeWaitHandle. No hacerlo usted mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top