为什么WebClient.DownloadStringTaskAsync()比WebClient.DownloadStr
本文关键字:WebClient DownloadStr DownloadStringTaskAsync 为什么 | 更新日期: 2023-09-27 18:17:02
所以,我有一个循环,调用API约60个数据项。循环的第一个实现使用WebClient.DownloadString()来获取结果。
为了使UI在下载期间响应,我将代码转换为使用WebClient.DownloadStringTaskAsync()
// Before
string data = webClient.DownloadString(url);
// After
string data = await webClient.DownloadStringTaskAsync(url);
这确实使UI响应,但它也将执行时间从大约15秒减少到大约1.6秒(速度提高了10倍!)
我的问题是:为什么?代码仍然是按顺序执行的,它必须等待一个下载完成,然后才能开始下一个下载(尽管没有阻塞),所以它如何执行得更快?如果有的话,我希望任务的开销会使它稍微慢一些。
我找到原因了。开发者(我)是个白痴。
很抱歉在这上面浪费了你的时间。当我开始剥离前后代码以作为示例发布时,我在之前的代码中发现了一个用于测试目的的Thread.Sleep()
。
除去Thread.Sleep()
后,时间都在同一范围内。
给所有留言的人加1
速度上的差异没什么特别的,如果你在实现上看起来两者做的几乎一样,它们之间的区别就是在什么时候使用它。例如,异步方法在移动设备上使用时效率更高。查看MSDN上的async获取更多信息