作者:娃娃亲莹莹世界 | 来源:互联网 | 2023-02-07 14:35
我想知道.Net HttpClient
async
方法是在新线程中运行还是在主线程中运行.
例如,在我的控制台应用程序中,我调用一种async
方法来使用HttpClient.GetStringAsync
方法下载URL内容.
这个方法(GetStringAsync)会在新的单独线程中运行吗?
1> Stephen Clea..:
通常,异步I/O方法不使用单独的线程.我在博客文章"没有线程"中详细解释了这一点.
但是,在这种特殊情况下,情况并非如此.WebRequest
.NET中的基于API的API长期以来一直支持异步操作,但实际上它们总是以同步方式完成HTTP代理检测和DNS查找,即使是通过异步API也是如此.这HttpClient
开始变得流行时注意到了.不幸的是,微软决定不修复这些长期存在的错误.
因此,HttpClient
将其WebRequest
调用包装在线程池线程中.请注意,它仍在使用"异步"API,因此只在线程池线程上完成同步部分(HTTP代理和DNS查找); 请求的其余部分是真正异步的.至少,某些平台也是如此.