我有一些代码可以像这样进行异步 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 error occurred。 ---> System.AggregateException:发生一个或多个错误。 ---> System.Threading.Tasks.TaskCanceledException:任务已取消。 --- 内部异常堆栈跟踪结束
在上面的例子中,我的 catch 语句从未到达,我不确定为什么。我知道 Tasks 在抛出异常时有一些复杂的因素,但我不知道如何在我的 catch 语句中处理它们?
最佳答案
异常不会在您的 try/catch 的同一个线程中抛出。这就是为什么你的 catch block 没有被执行。
检查 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.
}
关于c# - 为什么我的 try/catch block 没有捕获 System.AggregateException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31300311/