Reputation: 11165
In all the examples I can find of usages of HttpClient
, it is used for one off calls. But what if I have a persistent client situation, where several requests can be made concurrently? Basically, is it safe to call client.PostAsync
on 2 threads at once against the same instance of HttpClient
.
I am not really looking for experimental results here. As a working example could simply be a fluke (and a persistent one at that), and a failing example can be a misconfiguration issue. Ideally I'm looking for some authoritative answer to the question of concurrency handling in HttpClient.
Upvotes: 210
Views: 104270
Reputation: 13976
According to Microsoft Docs, since .NET 4.5 The following instance methods are thread safe (thanks @ischell):
CancelPendingRequests
DeleteAsync
GetAsync
GetByteArrayAsync
GetStreamAsync
GetStringAsync
PostAsync
PutAsync
SendAsync
PatchAsync
Upvotes: 212
Reputation: 11165
Found one MSDN forum post by Henrik F. Nielsen (one of HttpClient's principal Architects).
Quick summary:
If you have requests that are related (or won't step on eachother) then using the same HttpClient makes a lot of sense.
In genral I would recommend reusing HttpClient instances as much as possible.
Upvotes: 23
Reputation: 4133
Here is another article from Henrik F. Nielsen about HttpClient where he says:
"The default HttpClient is the simplest way in which you can start sending requests. A single HttpClient can be used to send as many HTTP requests as you want concurrently so in many scenarios you can just create one HttpClient and then use that for all your requests."
Upvotes: 108