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

4 回答 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());
于 2013-01-21T10:28:18.407 回答
3

创建一个实际开始的任务列表并执行Task.WaitAll(taskList.ToArray())

if(condition)
{
    var task1 = Task.Factory.StartNew (call the web service1...);
    taskList.Add(task1);
}
// etc...
于 2013-01-21T10:27:36.077 回答
0

一般可以将任务列表保存到List(tasks)中,使用如下代码:

    Task.WaitAll(tasks.ToArray());
于 2013-01-21T10:28:12.357 回答
0

请参阅如何:等待一项或多项任务完成。您可以等待一个 s 数组Task

于 2013-01-21T10:28:33.040 回答