C#WaitAny和错过的事件
本文关键字:事件 错过 C#WaitAny | 更新日期: 2023-09-27 18:21:38
当我使用时
int event_idx = WaitHandle.WaitAny(ExportEvents.ToArray());
如果事件在WaitAny
函数调用之前处于信号状态,则WaitAny
函数将:
- 立即生成此事件id
- 跳过此事件并从不生成此id
来自文档:
当用信号通知任何句柄时,此方法返回。
注意,当句柄被发出信号时,它会返回,而不是当它变成时。这意味着,如果已经用信号通知了某个句柄,该方法将立即返回。
当然,句柄在调用之前可能处于信号状态,但由于竞争条件,在调用期间没有信号。
这取决于等待句柄的类型以及是否有其他线程在等待。如果所有事件都具有手动复位特性,则结果是否会延迟。如果存在"自动重置"事件,并且另一个线程正在等待相同的事件,那么要知道哪一个事件将被发出信号是一场竞赛。