Я запускаю набор интеграционных тестов, использующих 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
предназначено для запуска асинхронных и не идеально подходит для наших сценариев интеграционного тестирования, где мы всегда говорим ему подождать. Таким образом, это приводит меня к двум вопросам, которые в некоторой степени связаны между собой:
HttpWebRequest
/ HttpWebResponse
более подходящим для этого сценария?HttpClient
для обработки ошибок при асинхронном запуске запросов?