.Net并行WaitAll()

3

我在我的代码中遇到了这样的情况,我需要启动未知数量的任务,并且想要使用 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个回答

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());

3
创建一个已经开始的任务列表,并执行Task.WaitAll(taskList.ToArray())
if(condition)
{
    var task1 = Task.Factory.StartNew (call the web service1...);
    taskList.Add(task1);
}
// etc...

0
通常,可以将任务列表保存到List(tasks)中,并使用以下代码:
    Task.WaitAll(tasks.ToArray());

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接