【发布时间】:2017-09-13 16:34:25
【问题描述】:
我正在尝试使用设置了超时的扩展 WebClient 下载文件,但我遇到了超时问题(或者我认为应该导致超时)。
当我使用 WebClient 开始下载并接收到一些数据时,然后断开 wifi - 我的程序挂起下载而没有抛出任何异常。我该如何解决这个问题?
编辑:它实际上会抛出异常,但比它应该的要晚(5 分钟对 1 秒,我设置) - 这就是我试图修复的。
如果您发现我的代码有任何其他问题,请也告诉我。谢谢你的帮助
这是我的扩展类
class WebClientWithTimeout : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest w = base.GetWebRequest(address);
w.Timeout = 1000;
return w;
}
}
这是下载
using (WebClientWithTimeout wct = new WebClientWithTimeout())
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
try
{
wct.DownloadFile("https://example.com", file);
}
catch (Exception e)
{
Console.WriteLine("Download: {0} failed with exception:{1} {2}", file, Environment.NewLine, e);
}
}
【问题讨论】:
-
您需要异步下载以保持 UI 处于活动状态
-
该程序没有 UI,所以我不介意它是同步的。困扰我的是,如果网络出现问题,无法下载文件,那么下载不会超时。
-
好的,看我的回答也许你可以实现异步调用并决定何时取消请求。如果没有取消下载,可能会使用时间并检查是否有下载进度