AsyncWaitHandle.WaitOne的详细信息

时间:2009-11-29 17:17:01

标签: c# multithreading

1)调用AsyncWaitHandle.WaitOne可能会阻止客户端或肯定会阻止客户端?。

2)WaitAll,WaitOne,WaitAny之间有什么区别?

2 个答案:

答案 0 :(得分:21)

  1. WaitHandle.WaitOne()是一个实例方法,它将阻塞,直到等待句柄发出信号(操作完成时)。如果之前已经发出信号(即操作已经完成),则WaitOne()的呼叫可能不会阻止。
  2. WaitHandle.WaitAll()WaitHandle.WaitAny()是静态方法,允许您指定要同时监控的等待句柄数:

    • WaitHandle.WaitAll()将一直等到指定句柄的所有在返回之前发出信号。
    • WaitHandle.WaitAny()会在任何指定的句柄发出信号后立即返回。

    这些方法允许您同时监视许多未完成的异步操作。

  3. 背景: AsyncWaitHandleIAsyncResult界面上的属性名称。此属性的实际类型为WaitHandle,它是SemaphoreMutexManual/AutoResetEvent等类型的抽象基类。

    另请参阅: Blocking Application Execution Using an AsyncWaitHandle(MSDN)

答案 1 :(得分:2)

这些方法允许您等待Windows事件。 WaitOne是非静态的,并等待该对象的事件句柄。 WaitAll和WaitAny是静态类范围的方法,等待一组事件处理程序。 WaitAll等待所有事件发出信号,WaitAny等待组中的单个事件。