【问题标题】:Do Windows.Web.Http.HttpClient have to be disposed per HTTP request? [duplicate]Windows.Web.Http.HttpClient 是否必须针对每个 HTTP 请求进行处理? [复制]
【发布时间】:2015-07-08 14:18:45
【问题描述】:

从answer 到问题:Do HttpClient and HttpClientHandler have to be disposed?,我发现最佳做法是不为每个 HTTP 请求处理 System.Net.Http.HttpClient。特别指出:

HttpClient 的标准用法不是在每次请求后都将其丢弃。

这很好。

我的问题是,这种“模式”是否也适用于Windows.Web.Http.HttpClient?还是应该根据 HTTP 请求处理它?我认为documentation 对此有点模糊。在其中一个示例中,它简单地指出:

// Once your app is done using the HttpClient object call dispose to 
// free up system resources (the underlying socket and memory used for the object)
httpclient.Dispose();

我相信这可以两种方式阅读,因此任何对此的具体意见表示赞赏。

【问题讨论】:

  • 想一想——如果你应该只将它用于单个请求/响应周期,那么这种类型的 point 会是什么?在这种情况下,他们为什么不给你一种直接构造某种形式的请求对象的方法呢?
  • 如果您“按请求”处理它,您将被限制为一个请求。真正的问题是:HttpClient.Dispose 有什么意义吗?

标签: c# .net windows-store-apps dotnet-httpclient


【解决方案1】:

在我看来,如果它打算一次只用于一个请求,那么如果你尝试将它用于多个请求,它只会抛出一个异常。

此外,请考虑除最早版本的 HTTP 之外的所有版本都允许对给定 TCP 连接进行多个请求。使用相同的HttpClient 对象允许框架为多个请求维护 TCP 连接。

虽然示例代码确实只执行一个请求,但请注意 the documentation 中的这段文字:

HttpClient 类实例充当会话来发送 HTTP 请求和接收响应。 HttpClient 实例是一组设置,这些设置应用于该实例执行的所有请求。另外,每个 HttpClient 实例都使用自己的连接池……

[强调我的]

对于充当“适用于该实例执行的所有请求的一组设置”的对象,很明显它必须用于多个请求。

【讨论】:

    猜你喜欢
    • 2013-03-20
    • 2013-03-20
    • 1970-01-01
    • 2020-06-08
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多