c# - 具有多个等待的 WhenAll vs New 对象
问题描述
之间有区别吗
var taskA = GetObjectA();
var taskB = GetObjectB();
var taskC = GetObject3();
await Task.WhenAll(taskA, taskB, taskC);
return new AllTasksResponse
{
A = taskA.Result,
B = taskB.Result,
C = taskC.Result
};
和
return new AllTasksResponse
{
A = await GetObjectA(),
B = await GetObjectB(),
C = await GetObjectC()
};
?
基本上,我想知道创建一个等待多个任务完成的新对象是否异步运行它们。或者我应该在这些情况下使用WhenAll(或WaitAll)来确保所有任务将并行运行?
解决方案
是的,两者之间存在巨大差异。
在第一种情况下,假设它们之间没有资源争用,所有 3 个任务将并行且独立地进行。
但是,在第二种情况下,他们只会一一进行。
的备注部分
WhenAll()
也很重要。根据有效的同步上下文(如果有的话),您遇到潜在死锁的点对于两者来说也是不同的。
任务引发的异常可见点不同。
推荐阅读
- javascript - 如何在 react native 中使用 Flatlist 渲染响应 API?
- java - 在 Kotlin 或 Java 中使用 ns-3 编译应用程序的最有效方法是什么?
- java - 使用放心发布 application/x-www-form-urlencoded 请求
- jssor - Jssor 滑块 - 箭头在移动设备上重叠图像
- python - 通过 psycopg2 插入 postgres 返回语法错误
- python - 如何发送固定宽度的文本电子邮件?
- ios - 仅在尚未运行 Objective C 时如何运行线程
- python - 屏蔽匹配多个条件的数据帧
- r - 按 id 分组并将匹配的位置连接到新功能中
- r - 图表上的选择性粗体字体