我有一些代码可以像这样进行异步http调用:
try
{
var myHttpClient = new HttpClient();
var uri = "http://myendpoint.com";
HttpResponseMessage response = client.GetAsync(uri).Result;
}
catch (Exception ex)
{
Console.WriteLine("an error occurred");
}
大多数时候这种方法很好,但有时我会得到一个System.AggregateException
,内容为One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> System.Threading.Tasks.TaskCanceledException: A task was canceled. --- End of inner exception stack trace
我的捕获声明在上面的案例中从未达成,我不知道为什么。我知道任务在抛出异常时有一些复杂因素,但我不知道如何在我的catch语句中处理它们?
答案 0 :(得分:3)
异常不会在try / catch的同一个线程中抛出。这就是为什么你的catch块没有被执行的原因。
检查this article about HttpClient
:
try
{
HttpResponseMessage response = await client.GetAsync("api/products/1");
response.EnsureSuccessStatusCode(); // Throw if not a success code.
// ...
}
catch (HttpRequestException e)
{
// Handle exception.
}