8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

我应该缓存并重用从 HttpClientFactory 创建的 HttpClient 吗?

Eran Galperin 1月前

81 0

我们可以在这里看到您错误地使用了 HTTPCLIENT,这会破坏您的软件的稳定性,我们不应该为每个 http 请求创建和处理 HttpClient。相反,它应该被缓存并重新使用...

我们可以在这里看到 你正在错误地使用 HTTPCLIENT,这会破坏你的软件的稳定性 的官方 .NET 文档中也是如此 HttpClient :

HttpClient 旨在实例化一次并在应用程序的整个生命周期内重复使用。为每个请求实例化一个 HttpClient 类将在重负载下耗尽可用的套接字数量。这将导致 SocketException 错误。以下是正确使用 HttpClient 的示例。

建议使用 HttpClientFactory,但查看之后:

  public interface IHttpClientFactory
  {
    /// <summary>
    /// Creates and configures an <see cref="T:System.Net.Http.HttpClient" /> instance using the configuration that corresponds
    /// to the logical name specified by <paramref name="name" />.
    /// </summary>
    /// <param name="name">The logical name of the client to create.</param>
    /// <returns>A new <see cref="T:System.Net.Http.HttpClient" /> instance.</returns>
    /// <remarks>
    /// <para>
    /// Each call to <see cref="M:System.Net.Http.IHttpClientFactory.CreateClient(System.String)" /> is guaranteed to return a new <see cref="T:System.Net.Http.HttpClient" />
    /// instance. Callers may cache the returned <see cref="T:System.Net.Http.HttpClient" /> instance indefinitely or surround
    /// its use in a <langword>using</langword> block to dispose it when desired.
    /// </para>
    /// <para>
    /// The default <see cref="T:System.Net.Http.IHttpClientFactory" /> implementation may cache the underlying
    /// <see cref="T:System.Net.Http.HttpMessageHandler" /> instances to improve performance.
    /// </para>
    /// <para>
    /// Callers are also free to mutate the returned <see cref="T:System.Net.Http.HttpClient" /> instance's public properties
    /// as desired.
    /// </para>
    /// </remarks>
    HttpClient CreateClient(string name);
  }

它表示每个调用总是会创建一个 HttpClient 实例并且调用者可能会缓存它。

每次调用 IHttpClientFactory.CreateClient 都保证返回一个新的 HttpClient 实例。调用者可以无限期地缓存返回的实例,或者将其使用放在 using 块中,以便在需要时将其释放。

所以问题是我应该完全依赖 从中Factory 还是仍然应该 HttpClient HttpClient

在我们的项目中,我们每次发出请求时都使用 HttpClientFactory.CreateClient ,但他仍然会出现套接字异常。

帖子版权声明 1、本帖标题:我应该缓存并重用从 HttpClientFactory 创建的 HttpClient 吗?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Eran Galperin在本站《.net》版块原创发布, 转载请注明出处!
最新回复 (0)
  • @TylerH 是的,这个问题和答案是关于从 HttpClientFactory 获得的 HttpClients。

返回
作者最近主题: