【发布时间】:2016-12-11 20:31:00
【问题描述】:
我将尝试在async-await 上发表演讲,并且我正在创建一个流程图,试图显示可能的执行顺序。
我试图以段落为基础
异步方法的开头与其他方法一样执行 方法。也就是说,它会同步运行,直到遇到“等待”(或 抛出异常)。
“await”关键字是事情可以异步的地方。等待是 像一元运算符:它接受一个参数,一个可等待的( “awaitable”是一个异步操作)。等待检查 awaitable 看看它是否已经完成;如果等待的有 已经完成,然后该方法继续运行 (同步,就像常规方法一样)。
如果 “await” 看到 awaitable 没有完成,那么它就会行动 异步。它告诉等待运行的其余部分 方法完成后,然后从异步方法返回。
稍后,当 awaitable 完成时,它将执行剩余部分 的异步方法。如果您正在等待一个内置的可等待对象(例如 一个任务),那么异步方法的其余部分将在 在“等待”返回之前捕获的“上下文”。
来自http://blog.stephencleary.com/2012/02/async-and-await.html
【问题讨论】:
-
顺便说一句,方法可以是同步的也可以是异步的,它仍然可以等待。
-
您认为谈论您不太了解的事情是否明智?已经有大量关于此功能的错误信息和模糊思考;我不确定你想创造更多。
-
见this diagram,来自here。
-
您的解释中的大部分模糊和挥手来自于对日程安排的含糊不清。例如,考虑一个 winforms 应用程序。有办法“完成所有独立工作”的想法应该让你深感怀疑;可以根据计时器滴答声或鼠标时刻或按键或按钮点击来安排该工作。如果工作将来自未来的按键,你怎么知道“所有工作”已经完成?如果你没有清楚地理解 Windows 是如何处理事件的,那么你就无法理解 winforms 中的 async。
标签: c# .net multithreading asynchronous async-await