我将尝试在async
- await
上发表演讲,我正在创建一个试图显示可能的执行顺序的流程图。
我试图将其基于段落
异步方法的开头就像执行其他方法一样 方法。也就是说,它同步运行,直到它达到“等待”(或 抛出异常)。
“await”关键字是事物可以异步的地方。等待是 就像一元运算符:它需要一个参数,一个等待的(一个 “等待”是一种异步操作)。等待检查 等待看它是否已经完成;如果等待的话 已经完成,然后该方法继续运行 (同步,就像常规方法一样)。
如果“等待”看到等待尚未完成,那么它就会行动起来 异步。它告诉等待运行剩余的 完成后的方法,然后从异步方法返回。
稍后,当等待完成时,它将执行剩余部分 异步方法。如果你正在等待内置的等待(例如 任务),然后异步方法的其余部分将在a上执行 在“等待”返回之前捕获的“上下文”。
来自http://blog.stephencleary.com/2012/02/async-and-await.html
答案 0 :(得分:2)
usr的答案基本上是正确的,尽管我认为它在线程和任务之间做了太强有力的比喻。任务不必像其他线程那样。记住,线程是工人,任务是工作。你可以在你的待办事项清单上有一百件事情,而不雇用任何工人来做这些事情。尽量不要将任务视为轻量级工作者,因为它们不是。他们是需要完成的工作;工作人员做什么取决于交给你任务的代码。
你的图表开始很好,但是在“调用者完成所有独立工作吗?无论是什么,呼叫者的延续都是如此。如果继续涉及做工作,它确实有效。其中一些工作可能是安排在当前线程上运行的任务。其中一些工作可能是保持用户界面的响应。
另外,不要忘记可以终止调用者的线程,并且可以将任务的继续安排到另一个线程。
这里可能发生很多很多事情;如果不了解调用者究竟在做什么以及调用者的线程上下文是什么,就不可能说明await返回后会发生什么。
答案 1 :(得分:1)