簡體   English   中英

每個請求創建全新的 HttpClient 是否便宜

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM