Sto seguendo il await tutorial su MSDN, e sto cercando di capire la differenza tra l'utilizzo await
come dichiarazione rispetto all'utilizzo await
come espressione. Tutta questa cosa asincrona mi sta piegando la mente e non riesco a trovare esempi per questo caso particolare.attendono dichiarazione vs. espressione
Fondamentalmente, volevo vedere come usare più await
s in modo asincrono, il che significa che non voglio dover aspettare che il primo si completi prima che inizi il secondo. Questo, per me, sconfigge lo scopo di asincronia per cominciare:
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";
}
Tuttavia, con un sottile cambiamento ci vogliono solo 3 secondi totali per la s due "Finito" a comparire, che è quello che vorrei - i due await
s in esecuzione veramente in modo asincrono:
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;
}
la mia domanda è, perché queste comportano in modo diverso? Che punto sottile mi manca qui?
l'ultima modifica mi ha fatto capire, grazie - la sequenza è il problema. Avrei dovuto capire che sono entrambe espressioni. –