我有一个异步等待表达式的问题,它返回错误的结果。
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方法,但我正在学习。感谢您的回答
发布于 2011-12-12 17:49:44
是的,这是一个已知的错误与CTP (my blog;Lucian Wischik's blog)。它将在完整版本中修复。
https://stackoverflow.com/questions/8472436
复制相似问题