2011-12-12 61 views
3

我有一個異步等待表達式返回錯誤結果的問題。異步等待表達式返回錯誤結果

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); 
} 

BTW。我知道最好的方法是使用WhenAll方法,但我正在學習。 謝謝您的回答

回答