HttpClient是否可以安全使用?

在所有的例子中,我可以findHttpClient的用法,它用于一个closures的呼叫。 但是,如果我有一个持续的客户情况,可以同时提出几个请求呢? 基本上,一次调用2个线程的client.PostAsync对于HttpClient的同一个实例是安全的。

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

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

 CancelPendingRequests DeleteAsync GetAsync GetByteArrayAsync GetStreamAsync GetStringAsync PostAsync PutAsync SendAsync 

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

默认的HttpClient是你可以开始发送请求的最简单的方法, 一个HttpClient可以用来发送尽可能多的HTTP请求,所以在许多情况下,你可以创build一个HttpClient,然后用它来处理所有的请求。

在Henrik F. Nielsen(HttpClient的首席架构师之一)发现了一篇MSDN论坛post 。

快速总结:

  • 如果你有相关的请求(或者不会彼此牵扯),那么使用相同的HttpClient就很有意义。
  • 在一般情况下,我会build议尽可能重用HttpClient实例。