最近,我一直在使用async
方法修饰符公开的C#异步计算功能,以及我需要结果的await
关键字。我过去曾经使用过这个功能,但是我仍然很难掌握的概念是死锁。我读了很多解释;但是,我仍然无法判断,只是通过查看,方法是否会死锁,或者如果方法返回的Task
未正确使用,我是否可以有效地再次调用异步方法而不会意外死锁。
我真的不明白使用await
关键字的做法是如此特殊,以致如果用户试图获取Result
属性(例如,属性),则永远不会返回结果从异步方法返回的Task
。
还有什么情况可以允许?我知道有一些关于阻塞和非阻塞操作的东西,但我的意思是一般代码会导致这个问题以及代码不会导致什么代码?
之前有人说这是因为获取Result
会阻塞线程,直到Task
完成执行,导致无法填充结果,因为它在同一个线程上运行, 我知道!我只是不明白;当你不使用任何类型的异步模式时,是否需要等待方法的结果呢?