C# NET中I/O绑定操作的调度

C# NET中I/O绑定操作的调度,c#,.net,asynchronous,dotnet-httpclient,C#,.net,Asynchronous,Dotnet Httpclient,如果我所在的线程不需要响应,并且持续执行依赖于I/O绑定调用(HttpClient请求)的结果,那么在.NET中异步实现调用有什么价值吗 Windows会知道我正在等待I/O操作,并在数据到达之前避免调度线程吗 我记得在某个地方读到过它,但恐怕我仍然难以理解它是如何工作的,以及何时可以依赖它。不,在那里使用异步没有任何价值。正如您所怀疑的,Windows将知道线程正在等待IO,并且在数据到达之前不会安排线程 然而,异步的思想是您实际上不需要创建新线程。async的思想是(我在这里略作介绍;Int

如果我所在的线程不需要响应,并且持续执行依赖于I/O绑定调用(HttpClient请求)的结果,那么在.NET中异步实现调用有什么价值吗

Windows会知道我正在等待I/O操作,并在数据到达之前避免调度线程吗


我记得在某个地方读到过它,但恐怕我仍然难以理解它是如何工作的,以及何时可以依赖它。

不,在那里使用异步没有任何价值。正如您所怀疑的,Windows将知道线程正在等待IO,并且在数据到达之前不会安排线程

然而,异步的思想是您实际上不需要创建新线程。async的思想是(我在这里略作介绍;Internet上有更好的文档可用),它试图做一些与您在这里手动操作类似的事情。因此,您不必创建新线程,async可以为您创建新线程。(它实际上并没有创建新线程,但您已经有了想法。)

如果这需要高性能,我不建议您现在执行它的方式。异步会更好。在您的情况下,当您处理1000个请求时,您将有1000个线程,这不是一个好主意。Async将更智能地完成这一任务,并提供更好的性能


使用异步(除了性能之外)的基本优点是,实际上您只在UI线程上编程。以前,这会锁定您的应用程序,但使用async,您的应用程序将保持响应速度。这确实是异步的主要优点。

注意:我认为可能的缺点可能是必须检查聚合异常、任务开销等。我已经选择了一个答案,但我仍然想知道是否有人可以解释一下操作系统和CLI如何协同工作,以避免调度等待I/O的线程,并将投票表决一条评论,该评论可以通过详细信息予以肯定。在这种情况下,我不是手动结束线程,它来自IIS或我们在IIS上使用的框架。所以我认为这不重要,你可能会没事的。此外,异步甚至可能无法工作(至少不是您所期望的),因为它对Windows/WPF/Metro应用程序意味着更多。