如果我在一个不需要响应的线程上,并且继续执行依赖于I / O绑定调用(HttpClient请求)的结果,那么在异步实现调用中是否存在任何值.NET?
Windows是否知道我正在等待I / O操作并且在数据到达之前不要调度线程?
我记得在某个地方读过它,但我担心我仍然难以理解它是如何工作的,以及什么时候可以依赖它。
答案 0 :(得分:2)
不,那里使用异步没有价值。如您所料,Windows将知道该线程正在等待IO,并且在数据到达之前不会安排线程。
然而,异步的想法是你真的不需要创建一个新线程。异步的想法是(我在这里削减一些角落;互联网上有更好的文档)它试图像你在这里手动做的那样。因此,async不是必须创建新线程,而是为您执行此操作。 (它实际上并没有创建一个新线程,但你明白了。)
如果这需要高性能,我建议不要按照现在的方式进行。异步会更好。在您的情况下,当您执行1000个请求时,您将拥有1000个线程,这不是一个好主意。 Async可以更加智能地实现这一目标,并且可以为您提供更好的性能。
使用async(除了性能)的基本优点是,它实际上只是在UI线程上进行编程。以前,这会锁定您的应用程序,但异步您的应用程序保持响应。这确实是异步的主要优势。