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 回答