在我能找到的所有用法示例中HttpClient
,它用于一次性调用。但是,如果我有一个持久的客户端情况,可以同时发出多个请求怎么办?client.PostAsync
基本上,一次针对同一实例调用 2 个线程是否安全HttpClient
。
我并不是真的在这里寻找实验结果。作为一个工作示例可能只是一个侥幸(并且是一个持久的),而失败的示例可能是一个错误配置问题。理想情况下,我正在为 HttpClient 中的并发处理问题寻找一些权威的答案。
在我能找到的所有用法示例中HttpClient
,它用于一次性调用。但是,如果我有一个持久的客户端情况,可以同时发出多个请求怎么办?client.PostAsync
基本上,一次针对同一实例调用 2 个线程是否安全HttpClient
。
我并不是真的在这里寻找实验结果。作为一个工作示例可能只是一个侥幸(并且是一个持久的),而失败的示例可能是一个错误配置问题。理想情况下,我正在为 HttpClient 中的并发处理问题寻找一些权威的答案。
根据 Microsoft Docs,自 .NET 4.5 以下实例方法是线程安全的(感谢@ischell):
CancelPendingRequests
DeleteAsync
GetAsync
GetByteArrayAsync
GetStreamAsync
GetStringAsync
PostAsync
PutAsync
SendAsync
PatchAsync
这是 Henrik F. Nielsen 关于 HttpClient 的另一篇文章,他说:
"默认的 HttpClient 是开始发送请求的最简单方式。单个 HttpClient 可用于同时发送任意数量的 HTTP 请求,因此在许多情况下,您只需创建一个 HttpClient,然后将其用于所有请求。 ”
找到 Henrik F. Nielsen(HttpClient 的主要架构师之一)的一篇MSDN 论坛帖子。
快速总结:
如果您有相关的请求(或不会相互影响),那么使用相同的 HttpClient 很有意义。
一般来说,我会建议尽可能多地重用 HttpClient 实例。