Dies ist meine Implementierung von Asynchron/erwartet in Windows Forms-AnwendungVerwirrung über die richtige Verwendung von Async/Await
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}";
}
Nach 5 Sekunden, um das Ergebnis in dem Text ist "3000 & 5000
".
Aber wenn ich ändern button1_Click
wie folgt aus:
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}";
}
das Ergebnis ist das gleiche, aber es dauert 8 Sekunden.
Warum zweite Version von button1_Click
als synchron arbeiten?
Im zweiten Fall führen Sie 'DoAsync2()' nicht aus, bis 'DoAsync1()' fertig ist. Ist das nicht klar? Es gibt ein schönes Bild auf [msdn] (https://msdn.microsoft.com/en-us/library/mt674882.aspx), das erklärt, was hinter 'async/await 'vorgeht, bitte studieren. – Sinatr
Wenn eine Referenz auf eine 'Task' genommen wird, beginnt sie mit der Ausführung! 'erwarten' sagt, wenn du fertig bist, gib meine Methode hier wieder ein. –
http://stackoverflow.com/documentation/c%23/48/async-wait#t=201607251201374786908 – Neel