HttpClient异步方法是否会在新线程中运行

Mhd*_*Mhd 1 c# multithreading httpclient

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

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

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

Ste*_*ary 6

通常,异步I/O方法不使用单独的线程.我在博客文章"没有线程"中详细解释了这一点.

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

因此,HttpClient将其WebRequest调用包装在线程池线程中.请注意,它仍在使用"异步"API,因此只在线程池线程上完成同步部分(HTTP代理和DNS查找); 请求的其余部分是真正异步的.至少,某些平台也是如此.