C#等待线程完成

时间:2017-06-01 21:35:07

标签: c# multithreading task

我想在同一时间运行10个线程,并希望启动一个新线程,如果一个完成。 例如: 我创建10个线程。如果1.完成,我想开始一个新的,但我想保持线程的最大值为10。

我怎么能意识到这一点?

我试过这样的话:

 for (int z = 0; z < 10; z++)
            {
                Thread t = new Thread(() => check(name)); T.Start();


                if (z == 9)
                {
                    z = 0;
                }

            }

问题在于,程序不会等待线程完成。 我怎么能在这里意识到呢?

谢谢!

2 个答案:

答案 0 :(得分:1)

首先,最好避免显式创建线程,除非您完全确定自己知道自己在做什么(线程资源有限且线程对象本身非常重量级)。在所有其他情况下更喜欢Task(或至少ThreadPool)。对于任务,您可以使用Task.WhenAll(任务数组)方法在恢复主执行流程之前等待所有必需的任务完成。

但是如果由于某种原因你仍然需要使用Thread类,你可以使用Thread.Join(thread)方法阻止执行线程并等待所有必需的线程完成他们的工作。:

foreach (var thread in jobThreads)
{
    thread.Join();
}

答案 1 :(得分:0)

搜索Thread.Join:

“阻止调用线程,直到此实例表示的线程终止”。

for (Thread t : threads) {
  t.join();
}

你可以阻止多个线程等待1个线程。