如何等待所有后台线程完成(在C#中)?

RKP*_*RKP 5 c# multithreading

如何让前台线程等待所有后台(子)线程在C#中完成?我需要从队列(数据库)获取挂起作业列表,启动一个新线程来执行每个作业,最后等待所有子线程完成.如何在C#中做到这一点?提前致谢.

Arm*_*yan 7

您可以将每个启动的线程存储在一个数组中.然后,当您需要等待它们时,在循环中的数组中的每个线程上调用Join方法.

Thread child = new Thread(...);
Threads.Add(child);
child.Start()

...

foreach(Thread t in Threads)
{
   t.Join();
}
Run Code Online (Sandbox Code Playgroud)

HTH

  • @RKP:等待所有线程完成就像轮流等待它们一样,不是吗?有一个winapi函数WaitForMultipleObjects,但它不是C#,虽然你可以使用它,但我认为没有意义. (3认同)

pli*_*nth 2

考虑使用线程池。你想要的大部分已经完成了。Microsoft有一个示例,它几乎可以完成您的全部任务。将“斐波那契”替换为“数据库任务”,这听起来像是您的问题。