为什么WebClient.DownloadStringTaskAsync()比WebClient.DownloadString()更快

时间:2016-11-09 13:18:37

标签: c# async-await task

所以,我有一个为大约60个数据项调用API的循环。循环的第一个实现使用WebClient.DownloadString()来获得结果。

为了在下载过程中使UI响应,我将代码转换为使用WebClient.DownloadStringTaskAsync()

// Before
string data = webClient.DownloadString(url);

// After
string data = await webClient.DownloadStringTaskAsync(url);

这确实使UI响应,但它也将执行时间从大约15秒减少到大约1.6秒(速度提高了10倍!)

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

2 个答案:

答案 0 :(得分:0)

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

很抱歉浪费你的时间。当我开始剥离前后代码作为样本发布时,我在前面的代码中找到了Thread.Sleep()用于测试目的。

移除Thread.Sleep()后,时间都在同一个球场。

发布有用评论的所有人

+1

答案 1 :(得分:0)

速度的差异并不是什么特别的,如果你在两者的实现中看起来都做得差不多,它们之间的区别在于何时使用它。例如,在移动设备上使用异步方法时效率更高。有关详细信息,请查看MSDN上的异步。