Как я могу обрабатывать асинхронные исключения с помощью System.Net.Http.HttpClient с моими интеграционными тестами?

Я запускаю набор интеграционных тестов, использующих System.Net.HttpClient. Большинство наших разделов «действие» в этих тестах используют этот общий формат:

// Arrange
// Do some stuff

// Act
var download = _client
    .GetStringAsync(testUrl)
    .Result;

// Assert
// Does "download" contain what I expected?

Однако периодическое выполнение этих тестов дает что-то вроде этого:

System.AggregateException : One or more errors occurred.
  ----> System.Threading.Tasks.TaskCanceledException : A task was canceled.
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task`1.get_Result()

Я понимаю, что использование HttpClientпредназначено для запуска асинхронных и не идеально подходит для наших сценариев интеграционного тестирования, где мы всегда говорим ему подождать. Таким образом, это приводит меня к двум вопросам, которые в некоторой степени связаны между собой:

  1. Является ли использование HttpWebRequest/ HttpWebResponseболее подходящим для этого сценария?
  2. Даже если это так, как лучше всего работать с HttpClientдля обработки ошибок при асинхронном запуске запросов?
9
задан Brandon Linton 22 May 2012 в 10:42
поделиться