为什么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倍!)

我的问题是:为什么?代码仍然是按顺序执行的,它必须等待一个下载完成,然后才能开始下一个下载(尽管没有阻塞),所以它如何执行得更快?如果有的话,我希望任务的开销会使它稍微慢一些。

为什么WebClient.DownloadStringTaskAsync()比WebClient.DownloadStr

我找到原因了。开发者(我)是个白痴。

很抱歉在这上面浪费了你的时间。当我开始剥离前后代码以作为示例发布时,我在之前的代码中发现了一个用于测试目的的Thread.Sleep()

除去Thread.Sleep()后,时间都在同一范围内。

给所有留言的人加1

速度上的差异没什么特别的,如果你在实现上看起来两者做的几乎一样,它们之间的区别就是在什么时候使用它。例如,异步方法在移动设备上使用时效率更高。查看MSDN上的async获取更多信息