我想在同一时间运行10个线程,并希望启动一个新线程,如果一个完成。 例如: 我创建10个线程。如果1.完成,我想开始一个新的,但我想保持线程的最大值为10。
我怎么能意识到这一点?
我试过这样的话:
for (int z = 0; z < 10; z++)
{
Thread t = new Thread(() => check(name)); T.Start();
if (z == 9)
{
z = 0;
}
}
问题在于,程序不会等待线程完成。 我怎么能在这里意识到呢?
谢谢!
答案 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个线程。