3

間違った結果を返す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メソッドを使用することであることを私は知っていますが、私は学習しています。ご回答ありがとうございます

4

1 に答える 1

3

はい、これはCTPの既知のバグです(私のブログ; Lucian Wischikのブログ)。フルリリースで修正される予定です。

于 2011-12-12T09:49:44.483 に答える