2014-09-10 74 views
0

我有我想要并行执行的方法列表。不要退出方法,直到所有线程完成

我现在有这样的代码:

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关键字(不知道如何或如果它是合适的)

  • 根本不使用线程类。使用Parallel.X或类似

环境

  • C#
  • 的Visual Studio 2012
  • 的.Net 4
+0

使用线程你想存储对新线程的引用并在它们上面调用'Join'。但是,正确的方法需要更多关于你在做什么的背景。 – 2014-09-10 11:52:34

+0

加入(http://msdn.microsoft.com/en-us/library/95hbf2ta(v=vs.110).aspx)所有这些在函数的末尾 – 2014-09-10 11:53:03

回答

1

使用的Thread.join()让你的主线程等待子线程,或者使用任务和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; 
    } 
} 
相关问题