198 votes

HttpClient est-il sûr d'utiliser simultanément?

Dans tous les exemples que je peux trouver des usages de HttpClient, il est utilisé pour un appels. Mais que faire si j'ai une persistance de la situation de client, où plusieurs demandes peuvent être faites en même temps? En gros, est-il sûr d'appel du client.PostAsync sur 2 fils à la fois contre la même instance de HttpClient.

Je ne suis pas vraiment à la recherche de résultats expérimentaux ici. Comme un exemple de travail pourrait simplement être un coup de chance (et persistant qui plus est), et un exemple d'échec peut être une mauvaise question. Idéalement, je suis à la recherche pour certains autorité réponse à la question de la simultanéité de la manipulation dans HttpClient.

194voto

Marcel N. Points 7908

Je pense que c'est tout sur MSDN:

Tout public static (Partagé en Visual Basic) les membres de ce type sont thread-safe. Tous les membres de l'instance ne sont pas garantis pour être thread coffre-fort.

Si vous ne pouvez pas utiliser deux ou plus de fils d'appeler les méthodes d'instance sur le même HttpClientde l'instance. Soit vous la file d'attente de vos demandes ou de l'utilisation de plusieurs HttpClient des cas.

La troisième option est, bien sûr, verrouillage de l'accès à votre seul HttpClient de l'instance. Mais alors vous perdez tout le multithreading sens, au moins en ce qui concerne les appels à cette classe.

EDIT:

Selon les commentaires ci-dessous (merci @ischell), les méthodes d'instance suivantes sont thread-safe (tous les async):

CancelPendingRequests
DeleteAsync
GetAsync
GetByteArrayAsync
GetStreamAsync
GetStringAsync
PostAsync
PutAsync
SendAsync

104voto

muruge Points 1239

Voici un autre article de Henrik F. Nielsen sur HttpClient où il dit:

"Le défaut HttpClient est la façon la plus simple dans laquelle vous pouvez commencer à envoyer des requêtes. Un seul HttpClient peut être utilisé pour envoyer autant de requêtes HTTP que vous souhaitez simultanément ainsi, dans de nombreux scénarios, vous pouvez simplement créer un HttpClient et ensuite l'utiliser pour toutes vos demandes."

21voto

Alex K Points 1479

Trouvé un post sur le forum MSDN par Henrik F. Nielsen (l'un des principaux architectes de HttpClient).

Résumé rapide:

  • Si vous avez des demandes qui sont liées (ou qui ne se chevauchent pas), alors utiliser le même HttpClient a beaucoup de sens.
  • En général, je recommanderais de réutiliser autant que possible les instances de HttpClient.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X