C# 自动重置事件何时重置?
即使使用多年,我仍然无法理解C# 自动重置事件何时重置?,c#,multithreading,C#,Multithreading,即使使用多年,我仍然无法理解AutoResetEvent是如何工作的 说到Set(),是否应该有一部分代码在某处等待WaitOne() 换句话说。。如果在WaitOne()之前成功调用了Set(),它是否会在WaitOne()之前自动重置,然后我将错过Set 或者换句话说,WaitOne()是否重置标志?来自: Set方法释放一个线程。如果没有等待 线程时,等待句柄保持有信号,直到线程尝试 等待它,或直到调用其重置方法 因此,要回答这些问题: 不必有WaitOne调用,Reset也将取消对句柄
AutoResetEvent
是如何工作的
说到Set()
,是否应该有一部分代码在某处等待WaitOne()
换句话说。。如果在WaitOne()
之前成功调用了Set()
,它是否会在WaitOne()
之前自动重置,然后我将错过Set
或者换句话说,WaitOne()
是否重置标志?来自:
Set方法释放一个线程。如果没有等待
线程时,等待句柄保持有信号,直到线程尝试
等待它,或直到调用其重置方法
因此,要回答这些问题:
- 不必有
调用,WaitOne
也将取消对句柄的信号发送。(如果让一个类依赖于其他类的正确行为,那将是一个糟糕的设计Reset
- 句柄一直保持信号状态,直到在AutoResetEvent上调用线程等待句柄或重置。因此不会丢失集合。当两个线程等待时,可能会丢失集合。请参阅文档:
不会取消对句柄的信号发送,但并不是保证每次等待都会这样做(参见前面的备注)WaitOne
从您的问题中,我得到的印象是,这将有助于您更仔细地阅读文档,也许您会看到.NET类包装了Windows事件对象。请参阅以获取有关如何使用事件对象的更多信息。下一部分可能也值得引用:)如果两个线程在WaitOne()中,并且Set()发出了信号,那么两个线程都将被释放,或者只有一个线程首先收到Set()。一个线程将被释放,然后事件将被自动重置,因此命名。有一个等待线程的队列系统,但我不确定您是否可以访问它。@VitaliPetrov-我添加了更多到背景信息的链接。根据,它将发布一个线程。不要用新问题更新问题,这会弄乱网站的qa格式。只需发布一个新的、明确的问题