我正在开发一个wp8应用程序,我使用HttpClient执行PostAsync和GetAsync操作,我将超时设置为1秒:
private HttpClient client = new HttpClient();
client.Timeout = TimeSpan.FromMilliseconds(1000);
我在Get和Post操作上有一个try catch块来捕获TimeOutExceptions:
try
{
var response = await client.PostAsync(param1,param2);
}
catch (TimeoutException e)
{
//do something
}
然而我的catch块没有捕获异常,我调试我的应用程序并观察throwen异常是一个TaskCanceledException,¿我怎么能找到正确的异常?,¿为什么TimeOutException被替换了?
最后,为避免混淆,我的实际超时时间为10秒,我只用1秒进行测试,如果超时超频,我需要向用户显示一条消息。
答案 0 :(得分:1)
在HttpClicent PostAsync上,超时不会作为TimeoutException发送。它作为TaskCanceledException发送。
我所看到的文档并非100%明确,但您获得的行为是正确的行为。达到超时时,抛出TaskCanceledException。
This makes a little bit of sense if you look here | HttpClicent.Timeout Property
您还可以使用任务上的CancellationTokenSource为各个请求设置不同的超时。