根据我的理解,async / await将使用ThreadPool线程执行异步操作,我们更喜欢Threadpool线程,因为操作将在更短的时间内完成,因此线程池线程将提前免费。
因此,如果我们使用async / await或Task来下载大量数据,那么它是否会影响应用程序性能,因为线程池线程不会提前释放,而Threadpool将不得不创建新线程(这是一项昂贵的操作)。
还有一件事,如果async / await在上面的场景中不可取,那么下载大量数据应该是什么?我们应该明确地创建新线程。
请提前分享您的想法和感谢..... :)):)
答案 0 :(得分:2)
Async IO在运行时不使用线程。这就是重点。
异步IO不会使IO更快。它只会改变它的启动和完成方式。对于大文件下载,它将获得零性能。
答案 1 :(得分:0)
一些更正,根据文档和我所解释的ThreadPools
没有创建线程的开销。因此,它提供了避免“线程创建开销和线程处理”的优点。
线程池通常具有最大线程数。如果所有线程都忙,则将其他任务放入队列,直到可以在线程可用时为其提供服务。
所以是的, MANY 下载同时 COULD 超过ThreadPool
中可用的线程数
最后你的主要问题:是的async / await是一个很好的文件下载解决方案。好的tutorial我曾经用过一段时间。
答案 2 :(得分:0)
在这种情况下,你绝对应该使用async / await。使用async / await不会阻塞调用线程,因此不会导致创建新线程。
async和await关键字不会导致创建其他线程。异步方法不需要多线程,因为异步方法不能在自己的线程上运行。
而且你在询问IO操作,使用async / await非常适合这个:
基于异步的异步编程方法比较好 几乎在每种情况下现有的方法。特别是这种方法 对于IO绑定操作,它比BackgroundWorker更好,因为 代码更简单,你不必防范竞争条件。
MSDN article有更多详情。