相关疑难解决方法(0)

如何以及何时使用'async'和'await'

从我的理解主要事情之一asyncawait要做的就是让代码易于读写-但使用它们等于产卵后台线程来执行持续时间长的逻辑?

我正在尝试最基本的例子.我在内联添加了一些评论.你能为我澄清一下吗?

// 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)

.net c# asynchronous async-await

989
推荐指数
19
解决办法
78万
查看次数

这是 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

.net c# multithreading asynchronous async-await

5
推荐指数
1
解决办法
1734
查看次数

标签 统计

.net ×2

async-await ×2

asynchronous ×2

c# ×2

multithreading ×1