c# - 当某些任务可以为空时如何处理?
问题描述
我想等待所有任务,但其中一些可以为空。它是这样的代码:
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));
推荐阅读
- javascript - 如何使用来自客户端的 Socket IO 到 (-).emit(-) 消息 (Javascript)
- octave - octave - 使用 textscan 解析非分隔文本
- python - 矩阵乘法返回错误的矩阵python并行
- swift - 设置属性 P 后需要调用方法 M
- c# - EWS HttpHeader 内容类型
- wordpress - Woocommerce 显示产品组合而不选择所有组合
- jmeter - JMeter 一台机器可以同时运行多少个并发用户
- javascript - 使用 Jquery 基于复选框选择更有效地添加和删除类
- javascript - 是否有 JavaScript 方法可以复制 Focus-on-next-element (Tab) 行为?
- jasper-reports - 如何调整波段高度(拉伸和“收缩”)以使报告占据整个页面?