DownloadFile vs DownloadFileAsync

时间:2014-01-09 00:00:30

标签: c# visual-studio-2010 networking webclient

我正在使用WebClient.DownloadFile一次从Web服务器下载单个文件,但是,我想知道是否“线程被阻止”开发人员意味着应用程序不会响应?

我尝试使用WebClient.DownloadFileAsync,但它不像DownloadFile那样工作,请澄清,我说不清楚因为我正在从我的网络下载文件,因此它可以立即下载,提前感谢。< / p>

PS:是的,我尝试使用谷歌搜索和阅读,找不到我需要的答案。

2 个答案:

答案 0 :(得分:10)

编辑:WebClient.DownloadFileAsync以“异步”结尾,但不返回任务。这是Event-based Asynchronous Pattern的一部分,所以我的回答是不相关的。这个是:您需要订阅WebClient.DownloadFileCompleted事件以了解异步操作何时完成。例如:

var client = new WebClient();
var uri = new Uri(address);

client.DownloadFileCompleted += (sender, e) => Console.WriteLine("Finished");
client.DownloadFileAsync(uri, "Hamsters.txt");

原始答案: WebClient.DownloadFileAsync返回您需要等待的任务。像这样:

await WebClient.DownloadFileAsync(...)

DownloadFileAsync将触发异步操作并返回一个任务,该任务将在操作结束时完成。 await表示等待该任务以异步方式结束,因此当结果为DownloadFileAsync时,它后面的代码将会运行。

同步DownloadFile将阻止调用它的线程。如果它是UI线程,那么是...您的应用程序将无法响应。如果它不是UI线程,那么它仍然会响应,但它的可伸缩性会降低(这意味着它使用线程等待而不是做工作,所以你的应用程序作为一个整体可以用相同数量的线程做得更少)< / p>

答案 1 :(得分:0)

client.DownloadFileTaskAsync(new Uri(url), saveLocation).Wait();
// Waiting for download...