首页 > 解决方案 > 等待多个任务时可能出现死锁?

问题描述

根据对上一个问题的评论之一,以下代码可能会死锁。

var task1 = myFunction1Async();
var task2 = myFunction2Async();
Task.WaitAll(task1, task2);

这是真的?

如果是这样,那么 TPL 的主要好处之一(轻松处理可能阻塞的多个 I/O 调用)似乎已经不存在了。

标签: c#task-parallel-library

解决方案


我认为令人困惑的是 Task.WaitAll 是(更好的)Task.WhenAll 方法的同步版本。这是一个 SO 帖子,涵盖了两者之间的区别。

引用帖子上的所有评论都试图说同步等待许多任务会导致与等待一个任务相同的死锁。


推荐阅读