J'ai deux ManualResetEvents, que j'utilise pour passer le contrôle entre deux threads. Essentiellement une coroutine. Parce que le coroutine contient des objets jetables (ManualResetEvents sont des poignées d'attente), il devrait être jetable. En outre, il doit disposer ces ManualResetEvents lorsqu'il est éliminé. Mais, comme un seul thread s'exécute à la fois, l'un d'entre eux attend (presque) toujours l'une des poignées.Qu'arrive-t-il aux threads en attente si j'appelle WaitHandle.Dispose()?
Quel est le comportement spécifié si je dispose des deux ManualResetEvents? Le fil d'attente sera-t-il bloqué pour toujours ou mettra-t-il fin à l'attente? Que faire si j'appelle .Set() en premier?
Je sais déjà que les filets sont sûrs à éliminer. Le problème est en train d'effectuer l'élimination. Je dois garantir qu'aucun thread n'est bloqué. –
La manière dont vous éliminez un événement pendant qu'il est utilisé confère un comportement imprévisible sur différentes plates-formes ou un chargement différent du processeur. Mais en appliquant le motif correct, résolvez cette question - ne jetez pas l'événement tant qu'il existe la possibilité qu'il puisse être utilisé. – Dewfy