HttpClient Async Handle Результаты множественного ответа - PullRequest
0 голосов
/ 09 января 2019

Я массово отправляю кучу запросов на внутренний Api и имею следующий (довольно) стандартный код:

var requests = new List<Task<HttpResponseMessage>>();

foreach (var req in requests)
{
    requests.Add(client.SendAsync(req));     // client is HttpClient.
}

var results = await Task.WhenAll(requests);  

ранее они отправлялись по одному, и ошибки исправлялись, просто проверяя ответ и бросая мой собственный, один за другим. Т.е.

if (response.StatusCode != HttpStatusCode.OK)
{
    throw new Exception($"Unexpected Status Code: {response.StatusCode}");
}

Однако теперь я хочу вызвать единственное исключение с информацией обо всех запросах, которые не вернули 200 .. информация не должна быть чрезмерно обширной (на данный момент) , только сколько ошибок .. как найти способ, откуда они пришли ...

В настоящее время я играю с:

var e = new List<Exception>();

foreach (var result in results)
{
    if (result.StatusCode != HttpStatuscode.OK)
    {
        var ex = new Exception($"Something helpful to locate batch.");
        e.Add(ex);
    }
}

throw new AggregateException(e);

Можно ли зарегистрировать AggregateException в Application Insights? Может быть, другой подход будет ..

int errorCount = 0;

foreach (var result in results)
{
    if (result.StatusCode != HttpStatusCode.OK)
    {
        errorCount++;
    }
}

// Assume some kind of way of identifying the batch of requests..
throw new Exception($"{errorCount} requests returned with unexepcted status code. Please check {batchIdentifier}");

Это кажется немного странным, но на самом деле немного достигает моей цели, я думаю ... какие-либо предложения о том, как я могу сделать это немного более забавным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...