use*_*000 5 .net c# multithreading asynchronous async-await
我将尝试发表演讲async-await我正在创建一个流程图,试图显示可能的执行顺序。
我试图以段落为基础
异步方法的开头就像任何其他方法一样执行。也就是说,它会同步运行,直到遇到“await”(或抛出异常)。
“await”关键字是事情可以异步的地方。Await 就像一个一元运算符:它接受一个参数,一个 awaitable(一个“awaitable”是一个异步操作)。Await 检查该 awaitable 以查看它是否已经完成;如果 awaitable 已经完成,则该方法将继续运行(同步,就像常规方法一样)。
如果“await”看到awaitable 尚未完成,则它会异步执行。它告诉 awaitable 在完成时运行该方法的其余部分,然后从异步方法返回。
稍后,当等待完成时,它将执行异步方法的其余部分。如果您正在等待内置的可等待对象(例如任务),则异步方法的其余部分将在“await”返回之前捕获的“上下文”上执行。
来自http://blog.stephencleary.com/2012/02/async-and-await.html
这
含糊不清,似乎不正确。
异步方法中接下来发生的事情不依赖于调用者。该方法现在是一个独立的代理(如线程),自行运行。它返回了一个Task本身的句柄。调用者可以随心所欲地执行该任务(例如,等待它,等待它,...)。
但是,如果调用者只是删除该任务,则异步方法将继续运行。
图片的“重新输入”部分发生在由等待的等待控制的时间。通常,这是一些外部事件,例如已完成的 IO 或计时器。异步方法现在恢复执行,而不知道或关心谁重新激活了它。
将每个异步方法视为一个独立的线程。每个await逻辑上都是一个 Thread.Join().
| 归档时间: |
|
| 查看次数: |
1734 次 |
| 最近记录: |