我有一个系统范围的手动重置事件,我通过执行以下操作创建:
EventWaitHandle notifyEvent = new EventWaitHandle(false, EventResetMode.ManualReset, notifyEventName, out createdEvent);
几个进程创建此事件(例如,它们在它们之间共享).它用于通知何时更新内容.
我希望能够设置此事件,以便在其上发出等待的所有进程,然后立即重置它,以便阻止事件的后续Waits.
如果我做了
notifyEvent.Set(); notifyEvent.Reset();
它有时会通知所有监听过程.
如果我做了
notifyEvent.Set(); Thread.Sleep(0); notifyEvent.Reset();
更多进程得到通知(我认为这会发生,因为调度程序有机会运行).
如果我这样做
notifyEvent.Set(); Thread.Sleep(100); notifyEvent.Reset();
然后一切似乎都很好,所有过程(例如~8)都会得到一致的通知.我不喜欢在睡眠呼叫中使用"幻数".
是否有更好的方法通知所有侦听器在其他进程中发生事件已发生的事件,以便在通知时收听事件信号的每个人都会立即重置事件,以便其他任何人去听该事件会阻止吗?
更新:信号量似乎不适合这里,因为事件的听众数量会随着时间的推移而变化.事先并不知道甚至需要通知时会有多少听众.