¿Qué sucede cuando HttpClient.PostAsync no se espera?
Estoy inspeccionando algún código que parece arrojar
System.Net.Sockets.SocketException: Una conexión existente fue cerrada forzosamente por el host remoto en ocasiones.
Utilizamos la biblioteca Polly para reintentos automáticos en las solicitudes de HttpClient.
– Estoy empezando a preguntarme si tiene algo que ver con el HttpClient.PostAsync
que no se está esperando abajo.
– ¿Eso podría causar alguna agotamiento de conexión?
Se agradecería cualquier orientación.
var payload = JsonConvert.SerializeObject(data);
var response = await _pollyPolicy.ExecuteAsync(() => _httpClient.PostAsync(_endpoint, new StringContent(payload, Encoding.UTF8, "application/json")));
en comparación con lo que “creo” que debería ser (nota la adición de async
await
):
var payload = JsonConvert.SerializeObject(data);
var response = await _pollyPolicy.ExecuteAsync(async () => await _httpClient.PostAsync(_endpoint, new StringContent(payload, Encoding.UTF8, "application/json")));
davy.ai
El primer fragmento de código sugiere que el método
HttpClient.PostAsync
no está siendo esperado, lo que podría causar el agotamiento de la conexión. El uso de Polly para autoreintentos es una buena práctica, pero puede no ser efectivo si el método subyacentePostAsync
no se espera.El segundo fragmento de código, que incluye las palabras clave
async
yawait
, parece ser una mejor implementación ya que espera la llamada al métodoPostAsync
. Esto aseguraría el manejo adecuado de la respuesta del servidor remoto y podría resolver el mensaje de errorSystem.Net.Sockets.SocketException
.Por lo tanto, se recomienda utilizar el segundo fragmento de código y asegurarse de esperar adecuadamente todas las solicitudes de HttpClient para evitar el agotamiento de la conexión y otros posibles problemas.