[英]Is it cheap to create brand new HttpClient per request
我一直認為這是一種反模式,因為 MS 文檔總是說“ HttpClient
旨在為每個應用程序實例化一次,而不是每次使用”。 但我越深入現代 C# 開發,我就越發現事情發生了變化。 例如這里是關於IHttpClientFactory
的推文
每次都會創建一個新的 HttpClient,但 HttpClient 的創建成本很低。
HttpClient 用來發出請求的內部 HTTP 處理程序(即完成所有工作且成本高昂的部分)被工廠智能緩存和重用。
這說明如果您為多個HttpClient
重用HttpMessageHandler
,那么您就是黃金。
假設我們要為每個 HTTP 請求設置一些標頭。 我們應該使用HttpRequestMessage
攔截器以舊的方式來做,還是我可以只創建一個每個請求的HttpClient
並且因為我要重用相同的HttpRequestMessage
我完全沒問題? 這是執行每個請求消息修改的現代方式嗎?
HttpRequestMessage
不打算被重用。 HttpClient
在發送你的請求時實際上會修改HttpRequestMessage
,所以以后使用它不是一個好主意。
通常,使用IHttpClientFactory
。 它不僅僅是重用消息處理程序,例如定期回收連接池。
針對單個消息處理程序創建多個HttpClient
實例的一個很好的用途是,如果您想為針對同一端點調用多個 API 設置不同的默認標頭。 這允許匯集到該端點的連接,而無需在每條消息上設置標頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.