的這是我實現異步電動機在Windows /等待窗體應用程序迷惑,對正確使用異步/等待
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秒後,結果在TextBox是「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](https://msdn.microsoft.com/en-us/library/mt674882.aspx)上有一個很好的圖解釋了'async/await'背後發生了什麼,請研究一下。 – Sinatr
當引用一個'Task'時,它開始執行! 「await」說,當你完成時,在這裏重新輸入我的方法。 –
http://stackoverflow.com/文檔/c%23/48/async-await#t=201607251201374786908 – Neel