c# - 设置超时时 HttpClient 挂起 (Windows Phone)

标签 c# windows-phone-8 async-await dotnet-httpclient

我正在尝试为 Windows Phone 应用程序中的 HttpClient 对象设置超时。但是,如果请求在超时之前没有完成,GetAsync 永远不会返回值。

我正在使用以下代码来获取响应:

HttpClientHandler handler = new HttpClientHandler();
HttpClient client = new HttpClient(handler);
client.Timeout = TimeSpan.FromSeconds(5);
client.BaseAddress = new Uri("http://www.foo.com");
HttpResponseMessage response = await client.GetAsync("/boo.mp3");//<--Hangs
byte[] data = await response.Content.ReadAsByteArrayAsync();

如何正确设置超时以从 GetAsync 获取结果?

最佳答案

取自HttpClient documentation :

The default value is 100,000 milliseconds (100 seconds).

A Domain Name System (DNS) query may take up to 15 seconds to return or time out. If your request contains a host name that requires resolution and you set Timeout to a value less than 15 seconds, it may take 15 seconds or more before a WebException is thrown to indicate a timeout on your request.

ZombieSheep 指出,5 秒甚至不足以完成 DNS 查询。

我建议也删除超时并让它成为默认值,因为据我所知,“检查”任务是否未停止的唯一方法是假设如果您对服务器执行 ping 操作并且它回复连接是仍然“正常”并且正在工作/下载您的文件。

关于c# - 设置超时时 HttpClient 挂起 (Windows Phone),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18231104/

相关文章:

c# - 在隔离存储中存储对象

c# - 在延迟之前长时间运行的异步方法会发生什么?

c# - Task.Wait() - 任务的等待线程是否已挂起

node.js - Node 中的批处理和排队 API 调用

c# - 模拟 HttpResponse WriteAsync

c# - 如何在没有 Build "Errors"的情况下将 Angular-CLI 与 Visual Studio 2017 一起使用

c# - XAML 数据绑定(bind)类单例 MVVM 对象

.net - 如果系统日期设置为 future ,为什么请求在 wp8 上会失败?

c# - 安全代码生成/比较和原子钟

c# - ILookup 接口(interface)与 IDictionary