关于.net:HttpClient可以安全地同时使用吗?

Is HttpClient safe to use concurrently?

在所有我能找到的关于HttpClient用法的例子中,它用于一次性呼叫。但是,如果我有一个持久的客户机情况,在这种情况下,可以同时发出多个请求呢?基本上,对同一个HttpClient实例同时调用2个线程上的client.PostAsync是否安全?

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


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

1
2
3
4
5
6
7
8
9
CancelPendingRequests
DeleteAsync
GetAsync
GetByteArrayAsync
GetStreamAsync
GetStringAsync
PostAsync
PutAsync
SendAsync


这是一条关于HttpClient从亨利克F.尼尔森说:嘿。

"默认HttpClient是最简单的方式是你可以开始发送请求。一个单一的HttpClient可以用于发送HTTP请求。多为你想太多concurrently场景,你可以创建一个使用HttpClient,然后所有您的要求。"


一个后发现MSDN论坛(一个由亨利克·尼尔森HttpClient的首席建筑师)。

快速的总结:

  • 如果你有一个请求是相关的(或不会步上彼此相同)然后使用HttpClient使得很多意义的。
  • 一般我会建议在尽可能多的使用HttpClient的实例。