【问题标题】:Reusing 'HttpClient' efficiently in a static class在静态类中有效地重用“HttpClient”
【发布时间】:2012-06-23 12:52:34
【问题描述】:

我正在我的每个静态请求方法中重新创建 HttpClient 的实例,但 read 最好(在大多数情况下)重用 HttpClient 实例。

在静态类中重用HttpClient 实例的首选/推荐方式是什么?

【问题讨论】:

    标签: c# .net static .net-4.0 httpclient


    【解决方案1】:

    由于您的请求方法是静态的,HttpClient 也必须是该类的 static 成员才能被重用(或某种道德等价物)。

    您也可以决定在这里添加更多抽象,例如而不是抓住static 字段使用private static getter 方法;这使您可以集中决定是否应重用 HttpClient 或在每次调用的基础上返回另一个实例。

    【讨论】:

    • 这不是一个危险的答案吗?我的理解是私下调用 HttpClient 不是线程安全的?我的理解是,您要么静态地调用它,要么在类级别上调用它​​,但总是公开地调用它。
    【解决方案2】:

    我的理解是,您可以初始化 HTTP 客户端并重用该实例,只要您公开调用它就会是线程安全的,请参见此处的线程安全部分 https://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.dnsrefreshtimeout(v=vs.110).aspx 如果您每次都创建一个新的 HTTPClient 调用,那么您所做的就是打开多个套接字。 这篇文章(以及相关的 cmets)非常简洁地处理了这个话题。 https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      相关资源
      最近更新 更多