我需要等待一个或多个任务完成。我需要等待的任务数量取决于几个条件。所以我的代码如下所示。
Task[] tasks = new Task[2];
if (condition1 == true)
{
tasks[0] = Task.Factory.StartNew(() => MyMethod1());
}
if (condition2 == true)
{
tasks[1] = Task.Factory.StartNew(() => MyMethod2());
}
Task.WaitAll(tasks);
假设condition2
为false,因此tasks数组中只有一个项目。在这种情况下,WaitAll
只会等待tasks[0]
吗?
答案 0 :(得分:2)
如果tasks数组的任何元素为null,则Task.WaitAll和Task.WhenAll抛出ArgumentException。
为避免异常,您可以将任务添加到List<Task>
:
List<Task> tasks = new List<Task>();
if (condition1)
{
tasks.Add(Task.Factory.StartNew(() => MyMethod1()));
}
if (condition2)
{
tasks.Add(Task.Factory.StartNew(() => MyMethod2()));
}
Task.WaitAll(tasks.ToArray());
答案 1 :(得分:0)
最好使用支持IEnumerable的WhenAll作为参数。这允许您使用与数组不同的容器,并且首先避免异常。
List<Task> tasks= new List<Task>();
if (condition1)
{
tasks.Add(Task.Factory.StartNew(() => MyMethod1()));
}
if (condition2)
{
tasks.Add(Task.Factory.StartNew(() => MyMethod2()));
}
await Task.WhenAll(tasks);