2011-12-12 5 views
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 я получаю результат 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, но я ухожу. Спасибо за ответы

ответ