我有一个线程正在等待EventWaitHandle(AutoResetEvent):
AutoResetEvent.WaitOne();
我有另一个线程表示第一个线程要继续
AutoResetEvent.Set();
AutoResetEvent.Close();
调用是否安全。在.Set之后直接关闭,换句话说,在AutoResetEvent被释放之前,是否可以保证等待线程已经继续?
答案 0 :(得分:1)
是的,如果事情完全按照您的问题所述完成,那将是安全的。如果您知道所有线程在您调用set时已经在等待,那么这些线程将被发出信号并且一切都会正常,因为所有等待的线程都会在调用set返回之前保证释放。
但是,如果由于某种原因经历了比赛并调用set并在之前关闭线程已开始等待,则在尝试等待时会出现异常。所以在实践中你最好避免这种模式。 IMHO