1

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

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

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

4

1 回答 1

2

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

但是,异步的想法是您实际上并不需要创建新线程。async 的想法是(我在这里偷工减料;Internet 上有更好的文档可用)它尝试执行类似于您在此处手动执行的操作。因此,您不必创建一个新线程,async 会为您执行此操作。(它实际上并没有创建一个新线程,但你明白了。)

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

使用异步的基本优势(除了性能之外)就像您实际上只在 UI 线程上进行编程一样。以前,这会锁定您的应用程序,但通过异步,您的应用程序将保持响应。这确实是异步的主要优势。

于 2013-06-26T11:14:47.933 回答