c# - 为什么我的 try/catch block 没有捕获 System.AggregateException?

标签 c# exception 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 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/

相关文章:

c# - TargetInvocationException 发生了,但我完全不知道为什么

Java Web 服务 - 错误服务 - ClassNotFound 异常

c# - EntityFramework 上下文未保存

c# - HttpClient - 处理聚合异常

c# - 重新抛出 AggregateException 的内部异常

java - C# 尝试从服务器获取 "get"

c# - 在 Visual C# 2010 中获取 DTE2 对象的引用

c# - 如何在 WCF Rest 服务中将类对象作为参数传递

visual-studio-2010 - NUnit 2.5.9 问题

ios - C# - Xamarin - HttpClient - 由于对象的当前状态,操作无效 - iOS