【发布时间】:2020-05-14 15:23:09
【问题描述】:
我想等待所有任务,但其中一些可以为空。就是这样的代码:
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 依赖于一个变量。所以我想并行运行所有任务并等待所有任务完成。如果一项任务为空,则将其视为已完成。
这段代码的问题是我在运行时得到一个空引用异常。
有什么方法可以做到这一点?或者我可以使用什么其他替代品?
【问题讨论】:
-
如何将任务放入显式集合中并使用
myTasks.Where(t => t!=null)传递给Task.WhenAll? -
myTask1 ?? Task.CompletedTask
-
@ErnodeWeerd
Task.CompletedTask无法返回结果 -
@Fabjan meh,因为它们在
Task<T>意义上都是不同的T,所以没关系 - 这是params Task[]过载,而Task.CompletedTask绝对是@ 987654329@ -
@UweKeim 这正是我的想法,可以做一个很好的答案。
标签: c# async-await task-parallel-library