如何在C#中检查AutoResetEvent或ManualResetEvent的阻止状态?

Pat*_*rik 5 c# synchronization block thread-safety

是否可以在调用WaitOne()之前检查C#System.Threading.AutoResetEvent或System.Threading.ManualResetEvent的阻塞状态?

Han*_*ant 5

EventWaitHandle没有“阻止状态”。它已设置或重置,仅此而已。不,您只能通过调用WaitOne()来检查其他方法。

您可以为超时参数传递0以避免阻塞。这通常是一个非常糟糕的主意,因为在WaitOne()调用返回后,它没有说明事件的状态。在那之后,它可能已经改变了十亿分之一秒。这会导致一种非常讨厌的错误,称为“线程竞赛”。Heisenbug。