headers example .net c#-4.0 concurrency dotnet-httpclient

.net - example - httpclient c#



¿Es seguro usar HttpClient al mismo tiempo? (3)

En todos los ejemplos que puedo encontrar de usos de HttpClient , se usa para llamadas únicas. Pero, ¿qué sucede si tengo una situación de cliente persistente, donde se pueden hacer varias solicitudes al mismo tiempo? Básicamente, ¿es seguro llamar al client.PostAsync en 2 hilos a la vez contra la misma instancia de HttpClient ?

Realmente no estoy buscando resultados experimentales aquí. Como un ejemplo de trabajo podría ser simplemente un golpe de suerte (y uno persistente en eso), y un ejemplo de falla puede ser un problema de configuración incorrecta. Idealmente, estoy buscando alguna respuesta autorizada a la cuestión del manejo de concurrencia en HttpClient.


Aquí hay otro article de Henrik F. Nielsen sobre HttpClient donde dice:

" El HttpClient predeterminado es la forma más sencilla en la que puede comenzar a enviar solicitudes. Se puede usar un solo HttpClient para enviar tantas solicitudes HTTP como desee al mismo tiempo, así que en muchos escenarios puede crear un HttpClient y luego usarlo para todas sus solicitudes. "


Se encontró una publicación en el foro de MSDN por Henrik F. Nielsen (uno de los arquitectos principales de HttpClient).

Sumario rápido:

  • Si tiene solicitudes relacionadas (o no se pisarán entre sí), entonces usar el mismo HttpClient tiene mucho sentido.
  • En general, recomendaría reutilizar las instancias de HttpClient tanto como sea posible.

Según MSDN , desde .NET 4.5 Los siguientes métodos de instancia son seguros para la ejecución de subprocesos (gracias @ischell):

CancelPendingRequests DeleteAsync GetAsync GetByteArrayAsync GetStreamAsync GetStringAsync PostAsync PutAsync SendAsync