Ответ 1
Согласно MSDN, начиная с .NET 4.5. Следующие методы экземпляра являются потокобезопасными (спасибо @ischell):
CancelPendingRequests
DeleteAsync
GetAsync
GetByteArrayAsync
GetStreamAsync
GetStringAsync
PostAsync
PutAsync
SendAsync
Во всех примерах я могу найти способы использования HttpClient
, он используется для одного вызова. Но что, если у меня есть постоянная ситуация с клиентом, когда несколько запросов могут быть сделаны одновременно? В принципе, безопасно ли вызывать client.PostAsync
на 2 потока одновременно против того же экземпляра HttpClient
.
Я не ищу здесь экспериментальных результатов. В качестве рабочего примера может быть просто случайность (и постоянная в этом), а неудачный пример может быть проблемой неправильной конфигурации. В идеале я ищу какой-то авторитетный ответ на вопрос об обработке concurrency в HttpClient.
Согласно MSDN, начиная с .NET 4.5. Следующие методы экземпляра являются потокобезопасными (спасибо @ischell):
CancelPendingRequests
DeleteAsync
GetAsync
GetByteArrayAsync
GetStreamAsync
GetStringAsync
PostAsync
PutAsync
SendAsync
Вот еще статья от Henrik F. Nielsen о HttpClient, где он говорит:
"HttpClient по умолчанию - это самый простой способ отправки запросов. Один HttpClient может использоваться для отправки столько HTTP-запросов, сколько требуется одновременно, поэтому во многих сценариях вы можете просто создать один HttpClient, а затем использовать это для всех ваших запросов."
Нашел один сообщение форума MSDN от Henrik F. Nielsen (одного из главных архитекторов HttpClient).
Краткое резюме: