我的代码中有一种情况,即我开始使用未知数量的任务,并希望使用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)
因为我不知道他们中的哪一个会真正开始。 有任何解决方案吗?
答案 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。