我曾经吃过亏,从池线程调用Task.Wait可能会导致线程饥饿死锁。根据这篇MSDN文章的“死锁”章节,我们应该遵守以下两个规则:
- 不要创建任何类,其同步方法等待异步函数,因为此类可能会从池线程中调用。 - 如果该类阻塞等待异步函数,请勿在异步函数内部使用该类。
似乎Task.Wait唯一合法的使用场景就是Main函数——我有点夸张了,但你明白我的意思。既然Task.Wait如此危险,为什么它仍然是.NET框架的一部分呢?
- 不要创建任何类,其同步方法等待异步函数,因为此类可能会从池线程中调用。 - 如果该类阻塞等待异步函数,请勿在异步函数内部使用该类。
似乎Task.Wait唯一合法的使用场景就是Main函数——我有点夸张了,但你明白我的意思。既然Task.Wait如此危险,为什么它仍然是.NET框架的一部分呢?