間違った結果を返すasync-await式に問題があります。
private Task<int> A
{
get
{
return TaskEx.RunEx<int>(async () =>
{
Thread.Sleep(10000);
return 2;
});
}
}
private Task<int> B
{
get
{
return TaskEx.RunEx<int>(async () =>
{
Thread.Sleep(4000);
return 4;
});
}
}
private string SumAll(int a, int b)
{
return (a + b).ToString();
}
ここで、SumAllメソッドを起動してプロパティAとBを合計したい場合、結果4が得られます。ここで6が得られます。以下に、機能しないコードを示します。
private async void Sum_Click(object sender, RoutedEventArgs e)
{
this.Result.Text = this.SumAll(await A, await B);
}
の場合、以下の方法で同じ例を実行すると、正しい結果が得られました。
private async void Sum_Click(object sender, RoutedEventArgs e)
{
var a = await A;
var b = await B;
this.Result.Text = this.SumAll(a, b);
}
ところで。最善の方法はWhenAllメソッドを使用することであることを私は知っていますが、私は学習しています。ご回答ありがとうございます