【问题标题】:Caught TimeOut Exception捕获超时异常
【发布时间】:2013-11-06 17:24:07
【问题描述】:

我正在开发一个 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 秒来测试,如果超过超时时间,我需要向用户显示一条消息。

【问题讨论】:

    标签: c# windows-phone-8 timeoutexception


    【解决方案1】:

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

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

    This makes a little bit of sense if you look here | HttpClicent.Timeout Property

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

    【讨论】:

      猜你喜欢
      • 2015-05-22
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      • 2010-09-06
      • 2011-11-02
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多