加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – DownloadFile vs DownloadFileAsync

发布时间:2020-12-15 08:37:38 所属栏目:百科 来源:网络整理
导读:我正在使用WebClient.DownloadFile一次从Web服务器下载单个文件,但是,我想知道是否“线程被阻止”开发人员意味着应用程序不会响应? 我尝试使用WebClient.DownloadFileAsync,但它不能像DownloadFile一样工作,请澄清,我说不清楚,因为我正在从我的网络下载文件
我正在使用WebClient.DownloadFile一次从Web服务器下载单个文件,但是,我想知道是否“线程被阻止”开发人员意味着应用程序不会响应?

我尝试使用WebClient.DownloadFileAsync,但它不能像DownloadFile一样工作,请澄清,我说不清楚,因为我正在从我的网络下载文件,所以它几乎立即下载,提前感谢.

PS:是的我试过谷歌搜索和阅读,找不到我需要的答案.

解决方法

编辑:WebClient.DownloadFileAsync以“Async”结尾但不返回任务.它是基于事件的异步模式的一部分,所以我的答案是不相关的.这个是:您需要订阅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线程,那么它仍然会响应,但它的可伸缩性会降低(这意味着它使用线程等待而不是做工作,所以你的应用程序作为一个整体可以用相同数量的线程做得更少)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读