单例是一种实例化HttpClient的好方法

时间:2016-05-10 15:39:26

标签: c# singleton httpclient

我有一个C#库,它使用HttpClient调用一个宁静的Web服务。

类库在MVC应用程序中使用,该应用程序可以运行数周而无需重新启动。

单例是一个创建HttpClient的好方法,所以我只有一个HttpClient可以在MVC应用程序的很长时间内使用它吗?

2 个答案:

答案 0 :(得分:0)

我是单身人士会在应用程序的生命周期内保留HttpClient,但我会问你为什么要这样做。这不是好习惯。

HttpClient实现了IDisposable,真的应该在你使用它之后处理它。使用声明是一种简单的方法:

using (var client = new HttpClient()) 
{
  // Do something
}

通过这种方式,您可以确保在不需要资源时清理所有资源。实例化新的HttpClient并不是特别昂贵,因此不会影响应用程序的性能。

答案 1 :(得分:0)

请查看Is HttpClient safe to use concurrently?

Here是Henrik F. Nielsen关于HttpClient的另一篇文章,他说:

"默认的HttpClient是您开始发送请求的最简单方式。单个HttpClient可用于同时发送任意数量的HTTP请求,因此在许多情况下,您只需创建一个HttpClient,然后将其用于所有请求。"

因此,如果要使用异步方法,可以使用带有HttpClient的单例,例如:

CancelPendingRequests
DeleteAsync
GetAsync
GetByteArrayAsync
GetStreamAsync
GetStringAsync
PostAsync
PutAsync
SendAsync

快速摘要:

  • 如果您有相关的请求(或者不会相互踩),那么使用相同的HttpClient会很有意义。
  • 在genral中,我建议尽可能多地重用HttpClient实例。