等待线程完成的标准方法

时间:2009-09-22 12:54:42

标签: c# multithreading

等待另一个线程中的进程完成的标准方法是什么?

在我的情况下,我有一个多线程服务,我想确保在服务停止时请求处理在服务退出之前完成。我应该使用ManualResetEvent吗?

2 个答案:

答案 0 :(得分:2)

你可以保留一个List,当服务停止时,依次调用每个上面的Thread.Join。这将等到每个人都退出。

答案 1 :(得分:2)

如果你有对等待完成的线程的引用,你可以在这些引用上调用.Join()方法。这将导致你的主线程等到你调用.Join()的线程完成后才能完成。

或者,您可以创建一个主线程和子线程都可以访问的ManualResetEvents数组。每个子线程都引用主线程可以访问的数组中的一个事件。在主线程结束时调用事件数组上的WaitHandle.WaitAll(事件数组),并在每个子线程结束时调用事件上的.Set()来表示主线程子线程完成。

在主线程退出之前,下面将阻塞,直到所有子线程在其事件上调用.Set():

WaitHandle.WaitAll(事件数组);