首页 > 解决方案 > 当某些任务可以为空时如何处理?

问题描述

我想等待所有任务,但其中一些可以为空。它是这样的代码:

Task<MyType1> myTask1 = getData01Async();
Task<MyTyp2> myTask2 = null;
Task<MyType3> myTask3 = null;

if(myVariable == true)
{
    myTask2 = getData02Async();
}
else
{
    myTask3 = getData03Async();
}


wait Task.WhenAll(myTask1, myTask2, myTask3);

这个想法是,task1 始终存在,但 task2 和 task3 取决于一个变量。所以我想并行运行所有任务并等待所有任务完成。如果一项任务为空,则将其视为已完成。

这段代码的问题是它运行时出现空引用异常。

有什么办法可以做到吗?或者我可以使用什么其他替代品?

标签: c#async-awaittask-parallel-library

解决方案


只需过滤掉空任务:

await Task.WhenAll(new Task[] { task1, task2, task3 }.Where(i => i != null));

推荐阅读