Saltar al contenido principal

Política de Timeout (Resiliencia)

La política de timeout de resiliencia cancela una operación si tarda más que la duración configurada.

Uso Básico​

var policy = ResiliencePolicy.Create()
.Timeout(TimeSpan.FromSeconds(5))
.Build();

Opciones de Configuración​

var policy = ResiliencePolicy.Create()
.Timeout(opts =>
{
opts.Timeout = TimeSpan.FromSeconds(10);
opts.Strategy = TimeoutStrategy.Optimistic; // o Pessimistic
opts.OnTimeout = context =>
{
_logger.LogWarning("Operación agotó el tiempo después de {Duration}", context.Timeout);
return Task.CompletedTask;
};
})
.Build();

Estrategias de Timeout​

Optimistic (Por Defecto)​

Depende de que la operación observe el CancellationToken. El token se cancela después del timeout.

// Funciona bien — HttpClient respeta la cancelación
await _httpClient.GetStringAsync(url, ct);

Pessimistic​

Termina forzosamente la operación ejecutándola en un hilo secundario y abandonándola cuando dispara el timeout. Úsalo para operaciones que no aceptan o respetan CancellationToken.

aviso

Con la estrategia Pessimistic, la operación abandonada continúa ejecutándose en segundo plano. Puede causar fugas de recursos. Úsala con precaución.

Combinado con Retry​

Cuando se combina con Retry, el timeout aplica por intento (no total):

var policy = ResiliencePolicy.Create()
.Retry(3)
.Timeout(TimeSpan.FromSeconds(5)) // 5s por intento, no 15s total
.Build();