在.Set之后直接在EventWaitHandle上调用.Close(.Dispose)是否安全?

时间:2015-11-23 10:55:15

标签: c# multithreading waithandle event-wait-handle

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

AutoResetEvent.WaitOne();

我有另一个线程表示第一个线程要继续

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

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

1 个答案:

答案 0 :(得分:1)

是的,如果事情完全按照您的问题所述完成,那将是安全的。如果您知道所有线程在您调用set时已经在等待,那么这些线程将被发出信号并且一切都会正常,因为所有等待的线程都会在调用set返回之前保证释放。

但是,如果由于某种原因经历了比赛并调用set并在之前关闭线程已开始等待,则在尝试等待时会出现异常。所以在实践中你最好避免这种模式。 IMHO