Thread.Join和waitHandle.WaitOne()有什么区别?

时间:2015-05-02 09:03:15

标签: c# multithreading

Thread.Join和waitHandle.WaitOne(),它们都强制调用线程等待。直到线程完成执行,直到分别调用waitHandle.Set()。

但除此之外,2之间有什么区别吗?

2 个答案:

答案 0 :(得分:5)

  

...它们都强制调用线程等到被调用   线程已经完成执行。

不,他们不是。它们完全不同。

WaitHandle.WaitOne将阻止调用线程,直到发出等待句柄。

Thread.Join将阻塞调用线程,直到调用Join方法的线程对象完成执行(终止)

答案 1 :(得分:1)

@helloworld,方法结束时的区别是""。除非您的方法捕获所有异常,否则在您调用WaitHandle.Set()之前,它可能会由于未处理的异常而退出(例如由于thread.abort)。

WaitHandles需要线程之间的合作/知识。被调用的线程必须传递等待句柄,并且必须在适当的时间发出信号。当两个线程共享诸如pub-sub队列之类的资源时,它很有用。

WaitHandles只是众多信令/锁定机制中的一种。信号量,互斥锁,锁文件甚至线程共享变量(仔细访问,例如Interlocked.Increment)都可用于信令。

Thread.Join - 不需要来自被调用线程的任何合作。当被调用的线程因任何原因(包括异常终止)完成时,join返回。

Thread.Join更像是Process.Wait。当进程因任何原因终止时,Process.Wait返回。

简而言之,如果您需要知道线程何时因任何原因而终止,请使用Thread.Join。

当您需要知道线程是否已执行到某一点时,请使用信令。

相关问题