我如何等待多个线程停止?

aks*_*hik 8 c# multithreading c#-4.0

我有一个主线程产生大约20个工作线程.
我需要停止主线程,直到所有其他线程都完成.
我知道(线程).Join.但这只适用于一个线程.

多个联接伤害了这样的表现.

t1.Join()
t2.Join()
...
t20.Join()

当程序一个接一个地等待每个人停下来.

我如何使主线程等待所有一组线程结束?

Las*_*olt 11

您应该真正研究任务并行(任务并行库).它使用线程池,但也管理任务窃取等.

报价:" 是TPL秤并发度动态最有效地利用所有可用的处理器此外,TPL处理工作的划分,线程的线程池调度,消除支持,状态管理等.低级细节. "在任务并行库上

你可以像这样使用它:

Task[] tasks = new Task[3]
{
    Task.Factory.StartNew(() => MethodA()),
    Task.Factory.StartNew(() => MethodB()),
    Task.Factory.StartNew(() => MethodC())
};

//Block until all tasks complete.
Task.WaitAll(tasks);
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用某种循环来生成线程:

数据并行(任务并行库)