【发布时间】:2017-03-17 09:07:50
【问题描述】:
我刚刚被介绍到这个概念,如果答案是微不足道的,请道歉。
我知道async 只是一个标志,表示方法内部有一个await,并且在异步方法执行其工作时控制将返回给调用者。我的理解是,假设调用堆栈中的某个地方没有等待异步方法,至少不是立即等待(即在执行异步方法时完成了一些其他工作),这很有用。
但是,await 似乎只适用于 async 方法,而这些方法又必须有 awaits 内部。这会产生无休止的调用链。它必须在某个地方结束,等待被应用于非异步方法。但是在哪里?
【问题讨论】:
-
您不能等待非异步方法,但是您可以通过访问任务的 Result 属性等待异步方法完成它的工作。你可以用它来“切断”异步链,或者你可以让你的整个链异步。
-
@TamásSzabó - 是的,你可以。您可以
await任何返回 awaitable 对象的方法。Task恰好是最常见的可等待对象。但即使在那里,也不需要Task返回方法为async。尽管它看起来是方法签名的一部分,但实际上它完全是您正在调用的方法的实现细节。 -
猜我错了。感谢您清除它!
标签: c# .net asynchronous async-await