c# - 当某些任务可以为空时如何WhenAll?

标签 c# async-await task-parallel-library

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

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 取决于一个变量。所以我想并行运行所有任务并等待所有任务完成。如果一项任务为空,则将其视为已完成。

这段代码的问题是我在运行时遇到空引用异常。

有什么方法可以做到吗?或者我可以使用哪些其他替代方案?

最佳答案

只需过滤掉空任务:

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

关于c# - 当某些任务可以为空时如何WhenAll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50800399/

相关文章:

c# - UWP 应用程序扩展

c# - 如何以编程方式将节点添加到 TreeView ?

c# - 相交 LINQ 查询

c# - 使用 EF6 从数据库中选择大量数据异步

c# - Subject<T> 停止发布项目

c# - 在 C# 中将 APRIL, 03/2013 字符串转换为 DateTime

node.js - 使用 TypeScript 和 Node/Passport 将异步回调传递到类构造函数中

c# - 可以通过使用多线程来改进此代码吗?

c# - 来自 C# 任务的通用回调

c# - Parallel.Invoke 什么时候有用?