HttpClient可以安全地同时使用吗?

时间:2012-06-24 14:22:08

标签: .net c#-4.0 concurrency dotnet-httpclient

在所有示例中,我都可以找到HttpClient的用法,它用于一次性通话。但是,如果我有一个持久的客户端情况,可以同时进行多个请求怎么办?基本上,对client.PostAsync的同一个实例同时在2个线程上调用HttpClient是安全的。

我不是在寻找实验结果。作为一个工作示例可能只是一个侥幸(并且持久的),一个失败的例子可能是一个错误的配置问题。理想情况下,我正在寻找HttpClient中并发处理问题的一些权威答案。

3 个答案:

答案 0 :(得分:135)

According to MSDN,自.NET 4.5以下实例方法是线程安全的(感谢@ischell):

CancelPendingRequests
DeleteAsync
GetAsync
GetByteArrayAsync
GetStreamAsync
GetStringAsync
PostAsync
PutAsync
SendAsync

答案 1 :(得分:87)

以下是来自Henrik F. Nielsen的关于HttpClient的另一个article,他说:

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

答案 2 :(得分:15)

由Henrik F. Nielsen(HttpClient的主要建筑师之一)找到一个MSDN forum post

快速摘要:

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