异步等待表达式返回错误结果

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方法,但我正在学习中。 感谢您的回答

1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接