2011-12-12 4 views
3

잘못된 결과를 반환하는 async-await 식에 문제가 있습니다. 내가 SumAll 방법을 실행하여 속성 A와 B를 요약하고자 할 때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(); 
} 

, 난 당신이 작동하지 않는 코드를 찾을 수 있습니다 아래의 I 6. 받아야 결과 (4)를 얻는다.

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 메서드를 사용하는 것이지만, 나는 듣고있다. 대답 해 주셔서 감사합니다.

답변

관련 문제