Question

Je fais des AutoResetEvents et ManualResetEvents multi-threading et utilisation ne contrôlent ma principale - boucle. Lorsque « destryoing » les fils que je dois aussi disposer de ces signaux, qui est clair.

Mais j'ai vu différentes façons comment se débarrasser Waithandles, et je ne suis pas sûr que l'on est correcte:

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();
 ....
}
Était-ce utile?

La solution

La version 2 est ce que je vais avec, comme il est (probablement) pas besoin d'accrocher à votre WaitHandle nouvellement disposé, si la mise à null est une bonne idée. Cela rend également plus facile d'adapter votre objet étant en mesure de récupérer d'être disposé, comme tout ce que vous devez faire est de vérifier pour voir si le WaitHandle est nul et recréer le cas échéant.

Cela étant dit, personne ne va gifler votre main pour aller avec l'option 3.

Ne pas utiliser l'option 1; il est généralement une mauvaise idée de « portée à l'intérieur » des objets et commencer membres disposant. Appel Close (depuis la méthode Dispose de IDisposable est explicitement mis en œuvre et a un code identique à Close) prend automatiquement en charge de l'élimination des SafeWaitHandle. Ne pas faire vous-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top