C#WaitAny并错过了活动

时间:2012-01-26 01:07:04

标签: c# multithreading

当我使用

int event_idx = WaitHandle.WaitAny(ExportEvents.ToArray());

如果事件在WaitAny函数调用之前处于信号状态,则WaitAny函数将:

  1. 立即生成此事件ID
  2. 跳过此活动,永远不会产生此ID

2 个答案:

答案 0 :(得分:3)

来自the documentation

  

当发出任何句柄信号时,此方法返回。

请注意,当手柄 发出信号时,它会返回,而不是 发出信号时。这意味着如果某个句柄已经发出信号,则该方法立即返回。

当然,在通话之前手柄可能处于信号状态,但由于竞争条件,手机在通话期间没有发出信号。

答案 1 :(得分:1)

这取决于等待句柄的类型以及是否有其他线程在等待。如果所有事件都有手动重置特性,那么结果将是imedidiate。如果有自动重置事件,并且另一个线程正在等待相同的事件,那么知道哪一个将被发信号是一场竞赛。