从我的理解主要事情之一async和await要做的就是让代码易于读写-但使用它们等于产卵后台线程来执行持续时间长的逻辑?
我正在尝试最基本的例子.我在内联添加了一些评论.你能为我澄清一下吗?
// I don't understand why this method must be marked as `async`.
private async void button1_Click(object sender, EventArgs e)
{
Task<int> access = DoSomethingAsync();
// task independent stuff here
// this line is reached after the 5 seconds sleep from
// DoSomethingAsync() method. Shouldn't it be reached immediately?
int a = 1;
// from my understanding the waiting should be done here.
int x = await access;
}
async Task<int> DoSomethingAsync()
{
// is …Run Code Online (Sandbox Code Playgroud) 我将尝试发表演讲async-await我正在创建一个流程图,试图显示可能的执行顺序。
我试图以段落为基础
异步方法的开头就像任何其他方法一样执行。也就是说,它会同步运行,直到遇到“await”(或抛出异常)。
“await”关键字是事情可以异步的地方。Await 就像一个一元运算符:它接受一个参数,一个 awaitable(一个“awaitable”是一个异步操作)。Await 检查该 awaitable 以查看它是否已经完成;如果 awaitable 已经完成,则该方法将继续运行(同步,就像常规方法一样)。
如果“await”看到awaitable 尚未完成,则它会异步执行。它告诉 awaitable 在完成时运行该方法的其余部分,然后从异步方法返回。
稍后,当等待完成时,它将执行异步方法的其余部分。如果您正在等待内置的可等待对象(例如任务),则异步方法的其余部分将在“await”返回之前捕获的“上下文”上执行。
来自http://blog.stephencleary.com/2012/02/async-and-await.html