You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在for循环创建线程后等待所有线程执行完毕?

解决方案

方法1:用集合存储线程对象,统一等待

你可以在循环中将创建的线程对象存入集合,循环结束后遍历集合调用Join(),避免逐个手动写Join的冗余:

List<Thread> threads = new List<Thread>();
for(int i = 0; i < 25; i ++)
{             
   Program x = new Program();
   Thread myThread = new Thread(() => x.doSomething(someParameter));
   myThread.Start();
   threads.Add(myThread); // 将线程加入集合统一管理
}

// 等待所有线程执行完成
foreach(var thread in threads)
{
    thread.Join();
}

// 这里写所有线程完成后要执行的后续代码

方法2:使用Parallel.For(极简替代方案)

如果不需要手动控制线程细节,.NET内置的Parallel.For能直接实现“并行执行+等待全部完成”的逻辑,无需手动管理线程:

Parallel.For(0, 25, i => 
{
    Program x = new Program();
    x.doSomething(someParameter);
});

// 这里直接写后续代码,Parallel.For会自动等待所有并行任务结束

方法3:使用Task(现代异步推荐方案)

如果是.NET Framework 4.0及以上版本,更推荐用Task实现,比直接操作Thread更灵活,也能轻松等待所有任务完成:

同步等待版本

List<Task> tasks = new List<Task>();
for(int i = 0; i < 25; i ++)
{             
   Program x = new Program();
   Task task = Task.Run(() => x.doSomething(someParameter));
   tasks.Add(task);
}

// 等待所有任务完成
Task.WaitAll(tasks.ToArray());

// 后续代码

异步等待版本(适用于异步上下文)

async Task RunAllTasks()
{
    List<Task> tasks = new List<Task>();
    for(int i = 0; i < 25; i ++)
    {             
       Program x = new Program();
       tasks.Add(Task.Run(() => x.doSomething(someParameter)));
    }

    await Task.WhenAll(tasks);
    // 后续代码
}

内容的提问来源于stack exchange,提问作者rogic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:35:20