.Net parallel WaitAll()

时间:2013-01-21 10:22:52

标签: c# .net parallel-processing

我的代码中有一种情况,即我开始使用未知数量的任务,并希望使用Task.WaitAll()

类似的东西:

if (condition) 
{ 
    var task1 = Task.Factory.StartNew (call the web service1...);
} 

if (condition) 
{ 
    var task2 = Task.Factory.StartNew (call the web service2...);
}

if (condition) 
{ 
    var task3 = Task.Factory.StartNew (call the web service3...); 
}

Task.WaitAll(task1, task2, task3);

问题在于我不能说

Task.WaitAll(task1, task2 , task3)

因为我不知道他们中的哪一个会真正开始。 有任何解决方案吗?

4 个答案:

答案 0 :(得分:6)

您可以使用任务列表并动态地将任务添加到列表中:

var tasks = new List<Task>();

if (condition) 
{ 
    var task = Task.Factory.StartNew (call the web service1...);
    tasks.Add(task);
} 

if (condition) 
{ 
    var task2 = Task.Factory.StartNew (call the web service2...);
     tasks.Add(task2);
}

if (condition) { 
    var task3 = Task.Factory.StartNew (call the web service3...); 
    tasks.Add(task3);
}

Task.WaitAll(tasks.ToArray());

答案 1 :(得分:3)

创建实际启动的任务列表并执行Task.WaitAll(taskList.ToArray())

if(condition)
{
    var task1 = Task.Factory.StartNew (call the web service1...);
    taskList.Add(task1);
}
// etc...

答案 2 :(得分:0)

通常,可以将任务列表保存到列表(任务)并使用 以下代码:

    Task.WaitAll(tasks.ToArray());

答案 3 :(得分:0)

How to: Wait on One or More Tasks to Complete。您可以等待一组Task s。