我有一个我想要并行执行的方法列表。
我目前有这段代码:
void MethodTest()
{
new Thread(() => Method1()).Start();
new Thread(() => Method2()).Start();
new Thread(() => Method3()).Start();
new Thread(() => Method4()).Start();
new Thread(() => Method5()).Start();
new Thread(() => Method6()).Start();
}
但是我不希望该方法返回,直到所有这些线程都完成了他们的工作。
我已经阅读了一些关于Await关键字但没有真正理解如何使用它。
实现上述目标的最佳方法是什么?
一些想法:
创建每个线程并将其添加到列表中然后循环结束 方法检查每个线程是否完整
使用await关键字(不知道如何或是否合适)
根本不使用Thread类。使用Parallel.X或类似的
环境
答案 0 :(得分:1)
方法
Thread.Join()
是你需要的
http://msdn.microsoft.com/en-us/library/system.threading.thread.join(v=vs.110).aspx
答案 1 :(得分:1)
使用Thread.Join()使主线程等待子线程,或使用Tasks和Task.WaitAll()方法。
这是一个快速示例,您可以使用Task并等待执行类似的操作。
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
var taskList = new List<Task<int>>
{
Task<int>.Factory.StartNew(Method1),
Task<int>.Factory.StartNew(Method2)
}.ToArray();
Task.WaitAll(taskList);
foreach (var task in taskList)
{
Console.WriteLine(task.Result);
}
Console.ReadLine();
}
private static int Method2()
{
return 2;
}
private static int Method1()
{
return 1;
}
}