System.Threading.Task等待怀疑

时间:2011-04-01 12:32:22

标签: multithreading c#-4.0 task multitasking

如果我使用System.Threading.Task来运行这样的并行任务:

Func<MyResult> func=ComputeResult;

var t = Task.Facroty.StartNew<MyResult>(ComputeResult, 1);//1 is some id
t.Wait();
var tt = Task.Facroty.StartNew<MyResult>(ComputeResult, 2);
tt.Wait();

t.Wait()会阻止下一个声明。

如果我在一个循环中开始几个任务并且想要以一种方式等待它们,使得循环内的任务不会相互阻塞,但是循环后的语句被阻止。

我正在使用以下构造:

var tasks=new List<Task<MyResult>>();

Func<MyResult> func=ComputeResult;

for(int i=0; i<10;i++)
{
    var t=Task.Facroty.StartNew<MyResult>(ComputeResult, i);
    tasks.Add(t);
    //t.Wait(); //SHOULD I CALL WAIT HERE?
}

 //OR THIS BETTER OR EVEN IF THIS WORKS
 foreach(var t in tasks)
 {
      t.Wait();
 }

 //do other stuff

编辑: - 在最终形式中,我使用的是以下行,而不是最后一个foreach循环。

 Task.WaitAll(tasks.ToArray());

1 个答案:

答案 0 :(得分:1)

怎么样:

Task.WaitAll(
    Enumerable
        .Range(1, 10)
        .Select(x => Task.Factory.StartNew(arg => 
        {
            // Do the task here
            // arg will obviously be the state object x
            // which will range from 1 to 10
        }, x))
        .ToArray()
);