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实例。
- 服务参考错误:无法为服务参考生成代码
- 何时使用C#/ .NET中的指针?
- .net服务总线build议?
- 为什么没有Windows.Forms.TreeView的SelectedNodeChanged事件?
- “Blend \ Newtonsoft.Json.dll”和“Solution \ packages \ … \”中均存在“Newtonsoft.Json …”
- 新的HTML5inputtypes的ASP.NET MVC HTML帮助器方法
- 如何获得.NET(C#)中的UserControl的HTML输出?
- .NET等效的剪切工具
- 用于ASP.NET MVC开发的Windows Azure或Amazon EC2?