我想知道 .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/