为什么我的 try/catch 块没有捕获 System.AggregateException?
Why isn't my try/catch block catching System.AggregateException?
我有一些代码可以像这样进行异步 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 语句在上述情况下从未达到,我不确定为什么。我知道 Tasks 在抛出异常时有一些复杂的因素,但我不知道如何在我的 catch 语句中处理它们?
异常不是在您的 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.
}
我有一些代码可以像这样进行异步 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 语句在上述情况下从未达到,我不确定为什么。我知道 Tasks 在抛出异常时有一些复杂的因素,但我不知道如何在我的 catch 语句中处理它们?
异常不是在您的 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.
}