即使使用了多年,我仍然无法理解AutoResetEvent
的工作方式。
当涉及Set()
时,是否应该在某个地方等待WaitOne()
的一部分代码?
换句话说..如果Set()
在WaitOne()
之前已成功调用,是否会在WaitOne()
之前自动将其重置,然后我会错过Set?
或者换句话说-WaitOne()
是否使标志复位?
最佳答案
从documentation:
因此,要回答以下问题:
WaitOne
,Reset
也会取消对句柄的信号。 (使一个类依赖于其他类的适当行为是不好的设计。Reset
在AutoResetEvent上被调用之前,该句柄一直保持发信号。因此,该集合将不会丢失。当两个线程等待时,可能会丢失Set。请参阅文档:WaitOne
会取消对句柄的信号,但并非每次等待都能保证做到这一点(请参见前面的说明)从您的问题中我得到的印象是,它将帮助您更仔细地阅读文档,或者也许看看the source code。您将看到.NET类包装了Windows Event对象。请参阅this article以获取有关如何使用/可以使用事件对象的更多信息。
关于c# - 何时重置AutoResetEvent?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59261959/