等待PostAsJsonAsync时抛出了AggregateException异常。

11

等待 API 完成时出现了 AggregateException 异常,我该如何解决?

我的 API 调用类似于这样

using (var httpClient = new HttpClient())
{
    httpClient.BaseAddress = new Uri(workflowUrl);
    var task = httpClient.PostAsJsonAsync("api/apiname/execute/", executeModel)
                             .ContinueWith(x => x.Result.Content.ReadAsAsync<bool>().Result);

    Task continuation = task.ContinueWith(x =>
    {
        bool response = x.Result;
    });
    continuation.Wait(); 

}
我在等待POST请求完成时遇到了以下异常。
  System.AggregateException was caught
  Message=One or more errors occurred.
  Source=mscorlib
  StackTrace:
       at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
       at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
       at System.Threading.Tasks.Task.Wait()
       at 
  InnerException: System.AggregateException
       Message=One or more errors occurred.
       Source=mscorlib
       StackTrace:
            at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
            at System.Threading.Tasks.Task`1.get_Result()
            at 
            at System.Threading.Tasks.Task`1.<>c__DisplayClass17.<ContinueWith>b__16(Object obj)
            at System.Threading.Tasks.Task.InnerInvoke()
            at System.Threading.Tasks.Task.Execute()
       InnerException: System.AggregateException
            Message=One or more errors occurred.
            Source=mscorlib
            StackTrace:
                 at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
                 at System.Threading.Tasks.Task`1.get_Result()
                 at WebUI.ListController.<ListRepeater_ItemCommand>b__f(Task`1 x) in PostAsJsonAsync:line 741
                 at System.Threading.Tasks.Task`1.<>c__DisplayClass1a`1.<ContinueWith>b__19()
                 at System.Threading.Tasks.Task`1.InvokeFuture(Object futureAsObj)
                 at System.Threading.Tasks.Task.InnerInvoke()
                 at System.Threading.Tasks.Task.Execute()
            InnerException: System.Threading.Tasks.TaskCanceledException
                 Message=A task was canceled.
                 InnerException:

你的实际代码中是否真的出现了异常?因为看起来你在真正的代码中使用了取消操作,但我在这里没有看到。 - svick
我曾经遇到过同样的问题,但无法解决。最终我使用了HttpWebRequest来避免这个问题。请求没有超时。我调试了Web服务,并使用Fiddler观察了请求的发送和返回,返回了一个OK / 200状态码。提交的数据非常小。 - Dudeman3000
1个回答

18
你正在发布一份大数据吗?我曾经遇到过类似的问题。我认为根本问题是由于带宽问题导致的临时超时。我尝试获取任务并手动等待,然后检查.IsFaulted.IsCancelled,但.Result会抛出AggregateException/TaskCancelledException
也许你可以尝试增加HttpClient.Timeout属性,默认为100秒?

6
谢谢你的提示,它让我疯狂了。我不知道为什么他们不使用更加合理的提示,比如“超时已过期”。 - Marcel Popescu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接