我将尝试就以下问题发表演讲async
-await
我正在创建一个流程图,试图显示可能的执行顺序。
我试图根据这些段落来确定这一点
异步方法的开头就像任何其他方法一样执行
方法。也就是说,它同步运行,直到遇到“等待”(或
抛出异常)。
“await”关键字是异步的地方。等待的是
就像一元运算符:它需要一个参数,一个可等待的(一个
“awaitable”是一个异步操作)。等待检查
等待查看它是否已经完成;如果可等待的有
已经完成,那么该方法就继续运行
(同步,就像常规方法一样)。
如果“await”发现等待尚未完成,那么它会采取行动
异步地。它告诉等待者运行剩余的部分
方法完成后,然后从异步方法返回。
稍后,当等待完成时,它将执行剩余部分
的异步方法。如果您正在等待内置的可等待对象(例如
一个任务),那么异步方法的其余部分将在
在“await”返回之前捕获的“context”。
from http://blog.stephencleary.com/2012/02/async-and-await.html
usr 的答案基本上是正确的,尽管我认为它在线程和任务之间进行了过于强烈的类比。任务不必与另一个线程类似。请记住,线程是工作者,任务是工作。您可以在待办事项清单上列出一百件事,而无需雇用任何工人来完成它们。尽量不要将任务视为轻量级工作人员,因为事实并非如此。它们是需要完成的工作;工作人员做什么取决于交给你任务的代码。
你的图表一开始很好,但在“调用者是否完成了所有独立工作?”时就偏离了轨道。调用者的延续是,不管它是什么。如果这种延续涉及到工作,那么它确实有效。其中一些工作可能是安排任务在当前线程上运行。其中一些工作可能是保持 UI 的响应能力。
另外,不要忘记调用者的线程可能会终止,并且任务的继续可以安排到另一个线程。
这里可能发生很多很多事情;如果不了解调用者到底在做什么以及调用者的线程上下文是什么,就不可能说出等待返回后立即发生的情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)