在.Set之后直接对EventWaitHandle调用.Close(.Dispose)安全吗



我有一个线程在等待EventWaitHandle(AutoResetEvent):

AutoResetEvent.WaitOne();

我有另一个线程向第一个线程发出继续的信号

AutoResetEvent.Set();
AutoResetEvent.Close();

在.Set之后直接调用.Close安全吗?换句话说,在AutoResetEvent被释放之前,是否可以保证等待线程继续?

是的,如果事情完全按照你的问题中描述的进行,那是安全的。如果知道在调用set时所有线程都已经在等待,那么这些线程将被发出信号,一切都会好起来,因为在返回对set的调用之前,所有正在等待的线程都会被释放。

但是,如果由于某种原因,您遇到了一个争用和调用集,并在线程开始等待之前关闭,则在尝试等待时会出现异常。所以在实践中,你最好避免这种模式。IMHO

最新更新