Async-Await表达式返回错误的结果

时间:2011-12-12 09:46:34

标签: c# .net async-await .net-4.5

我遇到了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方法,但我正在学习。 谢谢你的回答

1 个答案:

答案 0 :(得分:3)

是的,这是CTP的一个已知错误(my blog; Lucian Wischik's blog)。它将在完整版本中修复。