AsyncWaitHandle.WaitOne的详细信息
1)调用AsyncWaitHandle.WaitOne可能会阻止客户端或肯定会阻止客户端?
2)WaitAll,WaitOne,WaitAny之间有什么区别?
-
WaitHandle.WaitOne()
是一个实例方法,它将阻塞,直到等号句柄发出信号(操作完成时)。 如果之前已经发出信号(即操作已经完成),则对WaitOne()
可能不会被阻塞。 -
WaitHandle.WaitAll()
和WaitHandle.WaitAny()
是静态方法,允许您指定要同时监视的多个等待句柄:-
WaitHandle.WaitAll()
将一直等到所有指定的句柄在返回之前发出信号。 - 只要发出任何指定的句柄信号,
WaitHandle.WaitAny()
就会返回。
这些方法允许您同时监视许多未完成的异步操作。
-
背景: AsyncWaitHandle
是IAsyncResult
接口上的属性的名称。 此属性的实际类型是WaitHandle
,它是Semaphore
, Mutex
和Manual/AutoResetEvent
等类型的抽象基类。
另请参阅: 使用AsyncWaitHandle (MSDN) 阻止应用程序执行
这些方法允许您等待Windows事件。 WaitOne是非静态的,并等待该对象的事件句柄。 WaitAll和WaitAny是静态类范围的方法,它们等待一组事件处理程序。 WaitAll等待所有事件发出信号,WaitAny等待组中的单个事件。