Polly Timeout optimista utilizando HttpClientFactory. ¿Cómo puedo usar el token de cancelación?
Me gustaría entender cómo implementar una política de tiempo de espera optimista con Polly utilizando el HttpClientFactory.
En los ejemplos en la red, la política de tiempo de espera se utiliza al llamar a métodos asíncronos para poder pasar el token de cancelación. Pero si configuro la política de tiempo de espera desde la configuración de servicios, como se indica en la guía, ¿cómo gestiono el token de cancelación?
En el código de ejemplo, que se muestra en la guía enlazada, veo esto:
var timeoutPolicy = Policy.TimeoutAsync<httpresponsemessage>(10); // Tiempo de espera para un intento individual
serviceCollection.AddHttpClient("GitHub", client =>
{
client.BaseAddress = new Uri("https://api.github.com/");
client.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
client.Timeout = TimeSpan.FromSeconds(60); // Tiempo de espera global para todos los intentos
})
.AddPolicyHandler(retryPolicy)
.AddPolicyHandler(timeoutPolicy);
davy.ai
Para implementar una política de tiempo de espera optimista con Polly usando
HttpClientFactory
, puedes agregar una política de tiempo de espera al HttpClient utilizando el métodoAddPolicyHandler
como se muestra en el código de ejemplo. Sin embargo, este código establece el tiempo de espera general para todos los intentos y no administra el token de cancelación para solicitudes individuales.Para implementar el token de cancelación, puedes utilizar métodos asíncronos que acepten un token de cancelación y pasar el token a la política de tiempo de espera. Por ejemplo:
En este código, se crea un token de cancelación con un tiempo de espera de 2 segundos utilizando
CancellationTokenSource
. La política de tiempo de espera se agrega al HttpClient utilizando el métodoAddPolicyHandler
como antes, pero ahora la política recibe un contexto con el token de cancelación utilizando el métodoExecuteAsync
. El delegadoonTimeoutAsync
se utiliza para manejar el token de cancelación cuando se produce el tiempo de espera. Finalmente, se envía la solicitud utilizando un método asíncrono que acepta el token de cancelación.