2

我正在开发一个 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 块没有捕获异常,我调试我的应用程序并观察抛出的异常是 TaskCanceledException,¿我如何捕获正确的异常?,¿为什么替换 TimeOutException?

最后,为避免混淆,我的实际超时时间为 10 秒,我使用 1 秒来测试,如果超过超时时间,我需要向用户显示一条消息。

4

1 回答 1

1

在 HttpClient PostAsync 上,超时不会作为 TimeoutException 发送。它作为 TaskCanceledException 发送。

从文档中我看到的并不是 100% 清楚,但是你得到的行为是正确的行为。达到超时时,会抛出 TaskCanceledException。

如果你看这里,这有点道理| HttpClient.Timeout 属性

您还可以使用任务上的 CancellationTokenSource 为各个请求设置不同的超时。

于 2013-11-06T17:47:43.707 回答