【发布时间】:2016-05-10 23:57:25
【问题描述】:
我有一个 C# 库,它使用 HttpClient 调用一个安静的 Web 服务。
该类库在 MVC 应用程序中使用,该应用程序可以运行数周而无需重新启动。
单例是创建 HttpClient 的好方法吗,所以在 MVC 应用程序的很长的生命周期中,我只有一个 HttpClient 吗?
【问题讨论】:
标签: c# singleton httpclient
我有一个 C# 库,它使用 HttpClient 调用一个安静的 Web 服务。
该类库在 MVC 应用程序中使用,该应用程序可以运行数周而无需重新启动。
单例是创建 HttpClient 的好方法吗,所以在 MVC 应用程序的很长的生命周期中,我只有一个 HttpClient 吗?
【问题讨论】:
标签: c# singleton httpclient
请看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,但我想问你为什么要这样做。这不是一个好习惯。
HttpClient 实现了IDisposable,确实应该在你用完后处理掉。 using 语句将是一种简单的方法:
using (var client = new HttpClient())
{
// Do something
}
通过这种方式,您可以确保在您不需要资源时将其全部清理干净。实例化一个新的HttpClient 并不是特别昂贵,因此不会影响应用程序的性能。
【讨论】: