1) L'appel AsyncWaitHandle.WaitOne peut bloquer le client ou bloquera définitivement le client ?.Détails de AsyncWaitHandle.WaitOne
2) Quelle est la différence entre WaitAll, WaitOne, WaitAny?
1) L'appel AsyncWaitHandle.WaitOne peut bloquer le client ou bloquera définitivement le client ?.Détails de AsyncWaitHandle.WaitOne
2) Quelle est la différence entre WaitAll, WaitOne, WaitAny?
WaitOne()
ne bloque pas.WaitHandle.WaitAll()
et WaitHandle.WaitAny()
sont des méthodes statiques qui vous permettent de spécifier un certain nombre d'attente poignées pour surveiller simultanément:
WaitHandle.WaitAll()
attendra que tous les des poignées spécifiées ont été signalés avant qu'il ne revienne.WaitHandle.WaitAny()
retournera dès que des poignées spécifiées ont été signalées.Ces méthodes vous permettent de surveiller un certain nombre d'opérations asynchrones en cours en même temps.
Contexte:AsyncWaitHandle
est le nom d'une propriété sur l'interface IAsyncResult
. Le type réel de cette propriété est WaitHandle
, qui est une classe de base abstraite pour les types tels que Semaphore
, Mutex
et Manual/AutoResetEvent
.
Voir aussi:Blocking Application Execution Using an AsyncWaitHandle (MSDN)
Les méthodes vous permettent d'attendre sur un événement Windows. WaitOne n'est pas statique et attend le handle d'événement pour cet objet. WaitAll et WaitAny sont des méthodes statiques à l'échelle de la classe qui attendent un groupe de gestionnaires d'événements. WaitAll attend que tous les événements soient signalés et WaitAny pour un seul événement du groupe.
Je ne sais pas ce que vous entendez par 'attendre sur les événements de fenêtres. WaitOne est principalement utilisé pour synchroniser les opérations asynchrones, c'est-à-dire la synchronisation d'un thread avec un autre thread. L'OP posait des questions sur AsyncWaitHandle.WaitOne. AsyncWaitHandle est un WaitHandle généralement utilisé pour synchroniser un BeginInvoke, c.-à-d. Qu'il supprime le besoin d'interroger et d'appeler IsCompleted sur le IAsyncResult – zebrabox
Il peut également être utilisé pour les événements Windows (par exemple CreateEvent) voir la propriété SafeWaitHandle et http://msdn.microsoft.com /en-us/library/microsoft.win32.safehandles.safewaithandle.safewaithandle.aspx. – kenny
Avant EndInvoke() avons-nous besoin de les appeler? – user215675
Vous avez raison, mais je pense que le PO demandait spécifiquement à propos de AsyncWaitHandle.WaitOne(). Je pense donc qu'il demandait si l'appel à WaitOne bloquerait toujours même si l'opération asynchrone était terminée, ce qui bien sûr ne le ferait pas – zebrabox
N ° EndInvoke() peut être appelé à tout moment après BeginInvoke() et bloquera si l'opération n'a pas encore terminé. –