【发布时间】:2009-11-29 17:17:01
【问题描述】:
1)调用AsyncWaitHandle.WaitOne可能会阻塞客户端还是一定会阻塞客户端?。
2)WaitAll、WaitOne、WaitAny有什么区别?
【问题讨论】:
标签: c# multithreading
1)调用AsyncWaitHandle.WaitOne可能会阻塞客户端还是一定会阻塞客户端?。
2)WaitAll、WaitOne、WaitAny有什么区别?
【问题讨论】:
标签: c# multithreading
WaitHandle.WaitOne() 是一个实例方法,它将阻塞直到发出等待句柄信号(当操作完成时)。如果之前已经发出信号(即操作已经完成),则对 WaitOne() 的调用可能不会阻塞。WaitHandle.WaitAll() 和 WaitHandle.WaitAny() 是静态方法,允许您指定要同时监视的等待句柄数:
WaitHandle.WaitAll() 将等到所有指定句柄都发出信号后才返回。WaitHandle.WaitAny() 将在任何指定句柄发出信号后立即返回。这些方法允许您同时监控许多未完成的异步操作。
背景: AsyncWaitHandle 是IAsyncResult 接口上的属性名称。该属性的实际类型为WaitHandle,是Semaphore、Mutex、Manual/AutoResetEvent等类型的抽象基类。
另请参阅: Blocking Application Execution Using an AsyncWaitHandle (MSDN)
【讨论】:
这些方法允许您等待 Windows 事件。 WaitOne 是非静态的,它等待该对象的事件句柄。 WaitAll 和 WaitAny 是静态类范围的方法,它们等待一组事件处理程序。 WaitAll 等待所有事件发出信号,WaitAny 等待组中的单个事件。
【讨论】: