c# - HttpClient Async 方法会在新线程中运行吗

标签 c# multithreading httpclient

我想知道 .Net HttpClient async 方法是在新线程中运行还是在主线程中运行。

例如,在我的控制台应用程序中,我调用 async 方法来使用 HttpClient.GetStringAsync 方法下载 URL 内容。

此方法 (GetStringAsync) 会在新的单独线程中运行吗?

最佳答案

通常,异步 I/O 方法不使用单独的线程。我在我的博客文章中对此进行了详细解释 There Is No Thread .

但是,在这种特定情况下,情况并非如此。 .NET 中基于 WebRequest 的 API 长期以来一直支持异步操作,但实际上一直以同步的方式完成 HTTP 代理检测和 DNS 查找,即使是通过它们的异步 API。这是在 HttpClient 开始流行时注意到的。不幸的是,Microsoft 决定修复这些长期存在的错误。

因此,HttpClient 将其 WebRequest 调用包装在线程池线程中。请注意,它仍在使用“异步”API,因此只有同步部分(HTTP 代理和 DNS 查找)在线程池线程上完成;请求的其余部分是真正异步的。至少,对于一些平台来说是这样。

关于c# - HttpClient Async 方法会在新线程中运行吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43237250/

相关文章:

c# - 使用语句未处理的异常

c# .net Windows 8 App TcpClient 代码端口到 StreamSocket

c++ - 按需条件 std::atomic_thread_fence 获取的优缺点?

java - java 中的显式锁定与内在锁定降级

java - 使用 Apache HttpClient 下载文件

c# - 如何绘制圆角矩形作为圆角窗体的边框?

c# - 使用 .Replace() 修复不正确的内联 css

java - 从辅助线程在主线程上调用带参数的方法

httpclient - zuul 代理缓慢 - RibbonLoadBalancingHttpClient

c# - 可重用的 HttpClient 实例与静态变量(在多线程中大量使用)?