¿Es seguro utilizar HttpClient al mismo tiempo?
En todos los ejemplos que puedo encontrar de usos de HttpClient
, se usa para llamadas únicas. Pero ¿qué pasa si tengo una situación de cliente persistente, donde se pueden realizar varias solicitudes al mismo tiempo? Básicamente, ¿es seguro llamar client.PostAsync
a 2 subprocesos a la vez contra la misma instancia de HttpClient
.
Realmente no estoy buscando resultados experimentales aquí. Como ejemplo práctico, podría ser simplemente una casualidad (y además persistente), y un ejemplo fallido puede ser un problema de configuración incorrecta. Idealmente estoy buscando alguna respuesta autorizada a la cuestión del manejo de concurrencia en HttpClient.
Según Microsoft Docs , desde .NET 4.5 los siguientes métodos de instancia son seguros para subprocesos (gracias @ischell):
CancelPendingRequests
DeleteAsync
GetAsync
GetByteArrayAsync
GetStreamAsync
GetStringAsync
PostAsync
PutAsync
SendAsync
PatchAsync
Aquí hay otro artículo de Henrik F. Nielsen sobre HttpClient donde dice:
" El HttpClient predeterminado es la forma más sencilla de comenzar a enviar solicitudes. Se puede usar un único HttpClient para enviar tantas solicitudes HTTP como desee simultáneamente, por lo que en muchos escenarios puede simplemente crear un HttpClient y luego usarlo para todas sus solicitudes. " .
Encontré una publicación en el foro de MSDN de Henrik F. Nielsen (uno de los arquitectos principales de HttpClient).
Sumario rápido:
-
Si tiene solicitudes que están relacionadas (o que no se pisan entre sí), entonces usar el mismo HttpClient tiene mucho sentido.
-
En general, recomendaría reutilizar instancias de HttpClient tanto como sea posible.