2015-07-08 8 views
1

У меня есть некоторый код, который делает асинхронный HTTP вызов следующим образом:Почему мой блок try/catch не захватывает System.AggregateException?

try 
{ 
    var myHttpClient = new HttpClient(); 
    var uri = "http://myendpoint.com"; 

    HttpResponseMessage response = client.GetAsync(uri).Result; 
} 
catch (Exception ex) 
{ 
    Console.WriteLine("an error occurred"); 
} 

Большую часть времени это работает хорошо, но иногда я получу System.AggregateException, который читает One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> System.Threading.Tasks.TaskCanceledException: A task was canceled. --- End of inner exception stack trace

Мой улов заявление никогда достигнуто в приведенном выше случае, и я не знаю, почему. Я знаю, что у Заданий есть некоторые осложняющие факторы, когда они бросают исключения, но я не знаю, как обращаться с ними в своем заявлении о выводе?

+1

Можете ли вы поделиться StackTrace исключительной ситуации? – mrwaim

+0

Разве вы не ожидаете асинхронного запроса? –

+0

@ jkj2000: Вероятно, вы видите это исключение из другой задачи, а не тот, который был возвращен из «GetAsync» в приведенном выше коде. Выбранный код примера всегда будет вызывать исключение. –

ответ

2

Исключение не выбрасывается в том же потоке вашего try/catch. Вот почему ваш блок catch не выполняется.

Проверить this article about HttpClient:

try 
{ 
    HttpResponseMessage response = await client.GetAsync("api/products/1"); 
    response.EnsureSuccessStatusCode(); // Throw if not a success code. 

    // ... 
} 
catch (HttpRequestException e) 
{ 
    // Handle exception. 
} 
+0

Я думаю, что это должно быть 'response.EnsureSuccessStatusCode();'. Похоже, вы скопировали эту опечатку из статьи. – juharr

+0

Я не понимал. Спасибо @juharr! – Diego

+0

Спасибо. Я унаследовал код выше, который был там некоторое время, и задался вопросом, нужно ли нам делать Task.WaitAll там. К сожалению, мы находимся на .Net 4.0, поэтому async и ожидания не доступны нам, и необходимые исправления для их включения там просто не произойдут в этой системе. – jkj2000

 Смежные вопросы

  • Нет связанных вопросов^_^