WebClient DownloadDataAsync阻止

时间:2014-10-31 11:01:22

标签: c# asynchronous dns

我需要异步二进制下载并使用WebClient类。下载是异步的,但有一些例外。 DNS解析似乎同步工作。如果远程服务器没有响应,则应用程序阻止" ...无法解析"超时。有没有办法让它与某些属性完全异步,或者我必须使用BackgroundWorker并重新组织下载。

1 个答案:

答案 0 :(得分:0)

有关可以异步执行的DNS解析服务,请参阅System.Net.Dns

您可以使用Dns.GetHostAddressesAsync()Dns.GetHostEntryAsync()方法分别异步查找给定主机名的IP地址或主机条目信息。然后,您可以使用生成的IP地址信息直接指定WebClient操作的远程主机,从而绕过其DNS解析延迟。

您在评论中说明您正在执行以下操作:

WebClient wc = new WebClient();
wc.Proxy = null;
wc.DownloadDataCompleted +=
    new DownloadDataCompletedEventHandler(wc_DownloadDataCompleted);
wc.DownloadDataAsync(new Uri("http://www.undefined-domain.com"));

我建议您使用await进行DNS查找,也可以使用它进行下载:

WebClient wc = new WebClient();
byte[] result = await wc.DownloadDataTaskAsync("http://" + ipAddress.ToString());

(您可能不得不将从DNS结果格式化的IP地址变为适合WebClient的内容)

如果你需要更具体的建议,我建议你修正你的问题,使其更清晰,(非常重要)包括一个很好的代码示例,准确显示你现在正在做什么,并解释你如何希望它与众不同。