这是我在Windows Forms应用程序中使用异步/等待的实现
async Task<int> DoAysnc1()
{
await Task.Delay(3000);
return 3000;
}
async Task<int> DoAsync2()
{
await Task.Delay(5000);
return 5000;
}
private async void button1_Click(object sender, EventArgs e)
{
this.textBox1.Text = "";
var doAsync1 = DoAysnc1();
var doAsync2 = DoAysnc2();
var async1 = await doAsync1;
var async2 = await doAsync2;
this.textBox1.Text = $"{async1} & {async2}";
}
5秒后,文本框中的结果为“3000 & 5000
”。
但是,当我将 button1_Click
修改为以下内容时:
private async void button1_Click(object sender, EventArgs e)
{
this.textBox1.Text = "";
var async1 = await DoAysnc1();
var async2 = await DoAysnc2();
this.textBox1.Text = $"{async1} & {async2}";
}
结果是一样的,但需要8秒钟。
为什么 button1_Click
的第二个版本会表现得像同步操作?
DoAsync1()
完成后才会运行DoAsync2()
。这很清楚吧?请查看msdn上的一张漂亮图片,解释了async/await
背后发生的事情,请仔细研究。 - SinatrTask
时,它开始执行!await
的意思是,当你完成后,在这里重新进入我的方法。 - Callum Linington