Zun*_*Tzu 5 .net c# asynchronous task-parallel-library async-await
我学到了从池线程调用Task.Wait会导致线程饥饿死锁的困难方法.
根据这篇MSDN文章,在"死锁"一章中,我们应遵守这两条规则:
似乎唯一合法使用Task.Wait的地方是主要功能 - 我在这里夸大了一点,但你明白了.
为什么Task.Wait仍然是.NET框架的一部分,看它有多危险?
为什么Task.Wait仍然是.NET框架的一部分,看它有多危险?
因为你希望能够同步阻止Task.很少,但你仍然这样做.正如你所说,Main可能是最受欢迎(最好是唯一)的地方.这一点,以及微软以其向后兼容性而臭名昭着的事实,因此一旦引入,它就不太可能被弃用或从BCL中消失.同样如此Task.WaitAll.
在真正的问题 IMO开始时人们不正确读取文档和不理解调用该方法的影响,并最终误用.如果你仔细使用它,它的工作就很棒了.
另一件事是你不能总是一直异步.不幸的是,很多时候你有代码,它是签名同步的,不能改变,需要调用异步方法调用.是的,这是危险的,并且被所有人劝阻,并被认为是具有异步代码的反模式,我自己已经回答了至少十二个关于SO的问题,人们最终陷入僵局并且不明白为什么,但TPL作者仍然需要使这些类型的调用成为可能.
| 归档时间: |
|
| 查看次数: |
592 次 |
| 最近记录: |