Безопасно ли использовать HttpClient одновременно?

Во всех примерах я могу найти способы использования HttpClient, он используется для одного вызова. Но что, если у меня есть постоянная ситуация с клиентом, когда несколько запросов могут быть сделаны одновременно? В принципе, безопасно ли вызывать client.PostAsync на 2 потока одновременно против того же экземпляра HttpClient.

Я не ищу здесь экспериментальных результатов. В качестве рабочего примера может быть просто случайность (и постоянная в этом), а неудачный пример может быть проблемой неправильной конфигурации. В идеале я ищу какой-то авторитетный ответ на вопрос об обработке concurrency в HttpClient.

Ответ 1

Согласно MSDN, начиная с .NET 4.5. Следующие методы экземпляра являются потокобезопасными (спасибо @ischell):

CancelPendingRequests
DeleteAsync
GetAsync
GetByteArrayAsync
GetStreamAsync
GetStringAsync
PostAsync
PutAsync
SendAsync

Ответ 2

Вот еще статья от Henrik F. Nielsen о HttpClient, где он говорит:

"HttpClient по умолчанию - это самый простой способ отправки запросов. Один HttpClient может использоваться для отправки столько HTTP-запросов, сколько требуется одновременно, поэтому во многих сценариях вы можете просто создать один HttpClient, а затем использовать это для всех ваших запросов."

Ответ 3

Нашел один сообщение форума MSDN от Henrik F. Nielsen (одного из главных архитекторов HttpClient).

Краткое резюме:

  • Если у вас есть запросы, которые связаны (или не будут наступать на eachother), то использование того же HttpClient имеет большой смысл.
  • В genral я бы рекомендовал повторное использование экземпляров HttpClient как можно больше.