Внезапно этот фрагмент кода, который обычно работает, начал выдавать ошибки HttpRequestException. В логах я вижу, что запрос действительно был отправлен за 1 минуту и 35 секунд до появления ошибки. Может дело в тайм-ауте?
Вот код:
private async Task<HttpResponseMessage> RunRequest(HttpRequestMessage request)
{
var client = new HttpClient();
var response = await client.SendAsync(request).ConfigureAwait(false);
return response;
}
Вот вызывающий абонент (может быть от 10 до 50 тысяч элементов):
int counter = 0;
var tasks = items.Select(async i =>
{
if (await RunRequest(CreateRequest(i)))
counter++
}).ToList();
if (tasks.Any())
{
await Task.WhenAll(tasks);
}
Вот ошибка:
System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The request was aborted: The request was canceled.
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar)
--- End of inner exception stack trace ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at MyClass.<RunRequest>d__c.MoveNext()
--- End of inner exception stack trace ---
at MyClass.<RunRequest>d__c.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at MyClass.<RunRequest>d__0.MoveNext()
Есть ли ограничение, с которым может справиться Task.WhenAll?
WhenAll
; это почти наверняка проблема масштабируемости сервера (не в вашем коде). То есть, если сервер неasync
, он не может так быстро реагировать на внезапные изменения объема запросов. - person Stephen Cleary   schedule 10.08.2014