estoy siguiendo el tutorial await en el MSDN, y estoy tratando de averiguar la diferencia entre usar await
como una declaraciónfrente a la utilización await
como una expresión . Toda esta espera asincrónica está inclinando mi mente y no puedo encontrar ningún ejemplo para este caso en particular.esperan declaración frente a la expresión
Básicamente, quería ver cómo usar múltiples await
s de forma asíncrona, lo que significa que no quiero tener que esperar a que el primero se complete antes de que comience el segundo. Esto, para mí, en contra del propósito de asincronía, para empezar:
private async void button1_Click(object sender, EventArgs e)
{
// Using await as an expression
string result_a = await WaitAsynchronouslyAsync();
string result_b = await WaitAsynchronouslyAsync();
// This takes six seconds to appear
textBox1.Text = result_a + Environment.NewLine;
textBox1.Text += result_b;
}
public async Task<string> WaitAsynchronouslyAsync()
{
await Task.Delay(3000);
return "Finished";
}
Sin embargo, con un cambio sutil que sólo tarda 3 segundos en total para los dos "Terminado" s a aparecer, que es lo que me gustaría - los dos await
s ejecutando realmente de forma asíncrona:
private async void button1_Click(object sender, EventArgs e)
{
var a = WaitAsynchronouslyAsync();
var b = WaitAsynchronouslyAsync();
// Using await as a statement
await a;
await b;
// This takes three seconds to appear
textBox1.Text = a.Result + Environment.NewLine;
textBox1.Text += b.Result;
}
Mi pregunta es, ¿por qué estos se comportan de manera diferente? ¿Qué punto sutil me falta aquí?
Su última edición me hizo comprender, gracias - la secuencia es la cuestión. Debería haberme dado cuenta de que ambas son expresiones. –