不要退出方法直到所有线程都完成

时间:2014-09-10 11:49:25

标签: c# multithreading

我有一个我想要并行执行的方法列表。

我目前有这段代码:

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或类似的

环境

  • C#
  • Visual Studio 2012
  • .Net 4

2 个答案:

答案 0 :(得分:1)

答案 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;
    }
}