即使使用了多年,我仍然无法理解AutoResetEvent的工作方式。

当涉及Set()时,是否应该在某个地方等待WaitOne()的一部分代码?

换句话说..如果Set()WaitOne()之前已成功调用,是否会在WaitOne()之前自动将其重置,然后我会错过Set?

或者换句话说-WaitOne()是否使标志复位?

最佳答案

documentation:



因此,要回答以下问题:

  • 不必一定要调用WaitOneReset也会取消对句柄的信号。 (使一个类依赖于其他类的适当行为是不好的设计。
  • 直到在线程上等待该句柄或Reset在AutoResetEvent上被调用之前,该句柄一直保持发信号。因此,该集合将不会丢失。当两个线程等待时,可能会丢失Set​​。请参阅文档:


  • WaitOne会取消对句柄的信号,但并非每次等待都能保证做到这一点(请参见前面的说明)

  • 从您的问题中我得到的印象是,它将帮助您更仔细地阅读文档,或者也许看看the source code。您将看到.NET类包装了Windows Event对象。请参阅this article以获取有关如何使用/可以使用事件对象的更多信息。

    关于c# - 何时重置AutoResetEvent?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59261959/

    10-09 21:07