gpt4 book ai didi

c# - 每个请求创建全新的 HttpClient 是否便宜

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:15 24 4
gpt4 key购买 nike

自从 MS 文档 was always saying 以来,我一直认为这是一种反模式“HttpClient 旨在为每个应用程序实例化一次,而不是每次使用”。但我越深入现代 C# 开发,我就越发现事情发生了变化。例如这里是 a tweet关于 IHttpClientFactory

A new HttpClient is created each time, but HttpClient is cheap to create.

The internal HTTP handler that the HttpClient uses to make the request (i.e. the part that does all the work and is expensive) is intelligently cached and reused by the factory.

也就是说,如果您为多个 HttpClient 重用 HttpMessageHandler,那您就大功告成了。

假设我们要为每个 HTTP 请求设置一些 header 。我们是否应该使用 HttpRequestMessage 拦截器以旧的方式来做,或者我可以只创建一个每个请求的 HttpClient 因为我要重用相同的 HttpRequestMessage 我完全没问题?它是执行按请求消息修改的现代方式吗?

最佳答案

HttpRequestMessage 不打算重复使用。 HttpClient 在发送您的请求时实际上会修改 HttpRequestMessage,因此之后再使用它并不是一个好主意。

一般情况下,使用IHttpClientFactory。它不仅仅是重用消息处理程序,例如定期回收连接池。

针对单个消息处理程序创建多个 HttpClient 实例的一个很好的用途是,如果您想设置不同的默认 header 以针对同一端点调用多个 API。这允许汇集到该端点的连接,而无需在每条消息上设置 header 。

关于c# - 每个请求创建全新的 HttpClient 是否便宜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58507704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com