为什么C#异步死锁发生?

时间:2018-01-02 10:16:37

标签: c# .net asynchronous async-await task

最近,我一直在使用async方法修饰符公开的C#异步计算功能,以及我需要结果的await关键字。我过去曾经使用过这个功能,但是我仍然很难掌握的概念是死锁。我读了很多解释;但是,我仍然无法判断,只是通过查看,方法是否会死锁,或者如果方法返回的Task未正确使用,我是否可以有效地再次调用异步方法而不会意外死锁。

我真的不明白使用await关键字的做法是如此特殊,以致如果用户试图获取Result属性(例如,属性),则永远不会返回结果从异步方法返回的Task

还有什么情况可以允许?我知道有一些关于阻塞和非阻塞操作的东西,但我的意思是一般代码会导致这个问题以及代码不会导致什么代码?

之前有人说这是因为获取Result会阻塞线程,直到Task完成执行,导致无法填充结果,因为它在同一个线程上运行, 我知道!我只是不明白;当你不使用任何类型的异步模式时,是否需要等待方法的结果呢?

0 个答案:

没有答案