C#WaitAny和错过的事件

本文关键字:事件 错过 C#WaitAny | 更新日期: 2023-09-27 18:21:38

当我使用时

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

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

  1. 立即生成此事件id
  2. 跳过此事件并从不生成此id

C#WaitAny和错过的事件

来自文档:

当用信号通知任何句柄时,此方法返回。

注意,当句柄发出信号时,它会返回,而不是当它变成时。这意味着,如果已经用信号通知了某个句柄,该方法将立即返回。

当然,句柄在调用之前可能处于信号状态,但由于竞争条件,在调用期间没有信号。

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