PostAsync调用时如何管理AggregateException?

时间:2016-04-11 14:37:58

标签: c# timeout dotnet-httpclient

我收到了AggregateException,而client.PostAsyc调用时甚至设置了超时。

这是我的代码。

data %>%
    group_by(let ) %>% 
    do(mutate(., mean.by.letter = mean(.$x)))

有人可以建议如何管理吗?有时我得到AggregateException。

我已经提到了以下链接,但我仍然收到错误。事件我设置了超时。

How can I tell when HttpClient has timed out?

AggregateException is throwing while waiting for PostAsJsonAsync

Whats the difference between HttpClient.Timeout and using the WebRequestHandler timeout properties?

2 个答案:

答案 0 :(得分:1)

async添加到您的方法定义中,并使用await代替.Result

使用.Result阻止线程,您将失去使用Async方法的所有好处。

使用await“不仅会解包数据,还会解释异常(因此您将获得实际异常而不是AggregateException)。

var result = await client.PostAsync(session.Values["URL"] + "/abcd/", contents);

...

string data = await result.Content.ReadAsStringAsync();

这有点长,但这是关于使用async / await的好视频:https://channel9.msdn.com/Events/aspConf/aspConf/Async-in-ASP-NET

值得关注。

答案 1 :(得分:0)

AggregateException是执行异步任务时遇到的所有异常的集合。

如果您只想检查遇到的异常而不进行任何处理,您可以执行以下操作:

catch (AggregateException ae)
{
    // This will just throw the first exception, which might not explain everything/show the entire trace.
    throw ae.InnerException
}

catch (AggregateException ae)
{
    // This will flatten the entire exception stack to a string.
    throw new Exception(ae.ToString())
}