C#等待线程完成

C#等待线程完成,c#,multithreading,task,C#,Multithreading,Task,我想同时运行10个线程,如果一个线程已经完成,我想启动一个新的线程。 例如: 我创建了10个线程。如果是1。完成后,我想开始一个新的线程,但我想保持线程的最大值为10 我怎样才能意识到这一点 我试过这样做: for (int z = 0; z < 10; z++) { Thread t = new Thread(() => check(name)); T.Start(); if (z ==

我想同时运行10个线程,如果一个线程已经完成,我想启动一个新的线程。 例如: 我创建了10个线程。如果是1。完成后,我想开始一个新的线程,但我想保持线程的最大值为10

我怎样才能意识到这一点

我试过这样做:

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


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

            }
for(intz=0;z<10;z++)
{
线程t=新线程(()=>检查(名称));t.Start();
如果(z==9)
{
z=0;
}
}
问题在于,程序不会等待线程完成。 我怎么能在这里实现呢


谢谢

搜索线程。加入:

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


您可以阻止多个线程等待一个线程。

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

但若出于某种原因,您仍然需要使用Thread类,则可以使用Thread.Join(Thread)方法阻止正在执行的线程,并等待所有必需的线程完成其作业:

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

为什么让你的线程完成,只有10个线程,让它们在自己内部循环,从一个公共工作池中提取。你基本上是说“我想要一个10个的数组,但永远只使用一个”?不,我想要永久运行10个线程。如果一个线程完成了,我想用另一个线程来替换它。现在,从线程的角度思考与你应该做的相反。相反,对于异步任务(可能在单个线程上发生很多次),考虑尝试Parallel.ForEach-如果我使用thread.Join();我的应用程序只创建了一个线程。实际上,这并没有发生。查看MSDN的链接:嘿,谢谢你的回答。但是如果我使用Thread.Join();我的应用程序只创建了一个线程。。你知道我的失败吗/
foreach (var thread in jobThreads)
{
    thread.Join();
}