首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DownloadFile vs DownloadFileAsync

DownloadFile vs DownloadFileAsync
EN

Stack Overflow用户
提问于 2014-01-09 08:00:30
回答 2查看 26.5K关注 0票数 8

我使用WebClient.DownloadFile一次从web服务器下载一个文件,但是,我想知道开发人员所说的“线程被阻塞”是否意味着应用程序将不会响应?

我试过使用WebClient.DownloadFileAsync,但它不像DownloadFile那样工作,请澄清,我不知道,因为我是从我的网络上下载文件,所以它几乎是即时下载的,提前谢谢。

附言:是的,我试着搜索和阅读,但找不到我需要的答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-09 08:01:27

编辑:WebClient.DownloadFileAsync以"Async“结尾,但不返回任务。这是Event-based Asynchronous Pattern的一部分,所以我的回答无关紧要。这是:您需要订阅WebClient.DownloadFileCompleted事件,才能知道异步操作何时完成。例如:

代码语言:javascript
复制
var client = new WebClient();
var uri = new Uri(address);

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

原始答案:WebClient.DownloadFileAsync返回一个你需要等待的任务。如下所示:

代码语言:javascript
复制
await WebClient.DownloadFileAsync(...)

DownloadFileAsync将触发一个异步操作,并返回一个将在操作结束时完成的任务。await意味着等待该任务以异步方式结束,因此它之后的代码将在您得到DownloadFileAsync的结果时运行。

同步DownloadFile将阻塞调用它的线程。如果是UI线程,那么是的…你的应用程序将不会响应。如果它不是UI线程,那么它仍然具有响应性,但伸缩性较差(这意味着它使用线程来等待,而不是执行工作,因此您的应用程序作为一个整体可以使用相同数量的线程完成更少的工作)

票数 11
EN

Stack Overflow用户

发布于 2017-03-01 15:16:46

代码语言:javascript
复制
client.DownloadFileTaskAsync(new Uri(url), saveLocation).Wait();
// Waiting for download...
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21009162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档