Я массово отправляю кучу запросов на внутренний 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}");
Это кажется немного странным, но на самом деле немного достигает моей цели, я думаю ... какие-либо предложения о том, как я могу сделать это немного более забавным?