1

我有一些代码可以像这样进行异步 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 语句从未达到,我不知道为什么。我知道任务在抛出异常时有一些复杂的因素,但我不知道如何在我的 catch 语句中处理它们?

4

1 回答 1

3

异常不会在您的 try/catch 的同一线程中引发。这就是为什么你的 catch 块没有被执行。

检查这篇文章HttpClient

try
{
    HttpResponseMessage response = await client.GetAsync("api/products/1");
    response.EnsureSuccessStatusCode();    // Throw if not a success code.

    // ...
}
catch (HttpRequestException e)
{
    // Handle exception.
}
于 2015-07-08T18:09:33.697 回答