HttpClient (C #) дает сбой на многих асинхронных запросах?
Я использую HttpClient для асинхронного выполнения многих запросов к внешнему API. Я жду, пока все запросы завершатся, затем использую ответы в другом коде. Моя проблема в том, что если я делаю слишком много запросов, мой код выдает исключение, когда я использую Task.WhenAll для ожидания.
В конечном итоге этот код будет выполняться параллельно, и я имею в виду, что я буду выполнять множество наборов этих асинхронных запросов одновременно (т.е. 10 наборов из 200 асинхронных запросов). Я создал экземпляр HttpClient, который использую с асинхронными / ожидающими модификаторами .NET 4.5, например:
using (var client = new HttpClient())
{
// make a list of tasks
List<Task<HttpResponseMessage>> taskList;
List<MyData> replies;
for (int i = 0; i < MAX_NUMBER_REQUESTS; i++)
{
taskList.Add(client.GetAsync(externalUri);
}
List<HttpResponseMessage> responses = await Task.WhenAll(taskList);
// read each response after they have returned
foreach (var response in responses)
{
var reader = new System.IO.StreamReader(await response.Content.ReadAsStreamAsync());
replies.Add(JsonConvert.DeserializeObject<MyData>(reader.ReadToEnd()));
reader.Close();
}
foreach (var reply in replies)
{
// do something with the response from the external api call...
}
}
Я продолжаю получать TaskCanceledException. Посмотрев на это, я понял, что это, возможно, проблема с тайм-аутом. Я понятия не имею, как это исправить. Я попытался пакетировать мои запросы на 100 запросов, прежде чем использовать Task.WhenAll и повторить, что сработало. Затем, когда я запустил это параллельно с тремя наборами 100 запросов, что не удается. Я что-то упустил, есть ли у кого-нибудь понимание этого?