c# - 等待多个任务时可能出现死锁?
问题描述
根据对上一个问题的评论之一,以下代码可能会死锁。
var task1 = myFunction1Async();
var task2 = myFunction2Async();
Task.WaitAll(task1, task2);
这是真的?
如果是这样,那么 TPL 的主要好处之一(轻松处理可能阻塞的多个 I/O 调用)似乎已经不存在了。
解决方案
我认为令人困惑的是 Task.WaitAll 是(更好的)Task.WhenAll 方法的同步版本。这是一个 SO 帖子,涵盖了两者之间的区别。
引用帖子上的所有评论都试图说同步等待许多任务会导致与等待一个任务相同的死锁。
推荐阅读
- r - 如何计算数据框中的唯一行?
- python - 字典替换子字符串 Python 2.7
- javascript - 当子函数在异步函数上返回 false 时退出父函数
- sql - 升级到 Dot Net Core Sql 问题
- typescript - 角度/打字稿:异步订阅未按预期返回
- javascript - 使用 jQuery 动态更新现有表记录
- python - 用户输入 pd.read_excel 给出“ValueError:无效的文件路径或缓冲区对象类型” - Pandas
- python - 将数据集划分为训练和测试后将标签转换为指标矩阵
- sql - SQL 分离 | 将值分隔到新列中 - 从右到左排序
- c# - 使用 SwaggerHub 和/或 NSwagStudio 从 JSON Schema 生成 C# 类