私はMSDNのawaitawait
チュートリアルに従っており、ステートメントとして使用することと式await
として使用することの違いを理解しようとしています。この非同期待機のすべてが私の心を曲げており、この特定のケースの例を見つけることができません。
基本的に、複数のsを非同期で使用する方法を確認したかったawait
のです。つまり、最初のsが完了するのを待ってから、2番目のsを開始する必要はありません。これは、私にとって、非同期の目的を最初から無効にします。
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";
}
ただし、微妙な変更を加えると、2つの「Finished」が表示されるまでに合計3秒しかかかりません。これは、私が望んでいることです。2つはawait
本当に非同期で実行されます。
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;
}
私の質問は、なぜこれらは異なる動作をするのですか?ここで私が見逃している微妙な点は何ですか?