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 запросов, что не удается. Я что-то упустил, есть ли у кого-нибудь понимание этого?

Ответы на вопрос(2)

Ваш ответ на вопрос