Políticas de reintento
Reintente los errores transitorios con backoff.
Políticas de reintento es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.
¿Qué es Polly?
Polly es una biblioteca de resiliencia para .NET que ayuda a sus aplicaciones a afrontar errores transitorios, respuestas lentas y dependencias sobrecargadas. Proporciona estrategias como reintentos, disyuntor, tiempo de espera, alternativa y limitación de tasa.
Este curso utiliza Polly v8 (la API Polly.Core).
dotnet add package Polly.Core¿Por qué reintentar?
Muchos errores son transitorios: un breve problema de red, un tiempo de espera momentáneo o un servicio que se está reiniciando. Reintentar la operación unos instantes después suele funcionar sin molestar al usuario.
Los reintentos deben dirigirse únicamente a errores transitorios, nunca a errores permanentes como un 404.
Una estrategia básica de reintento
En Polly v8 se construye un ResiliencePipeline con un RetryStrategyOptions. De forma predeterminada, una excepción lanzada activa un reintento.
using Polly;
using Polly.Retry;
var pipeline = new ResiliencePipelineBuilder()
.AddRetry(new RetryStrategyOptions
{
MaxRetryAttempts = 3
})
.Build();Ejecutar mediante el pipeline
Envuelva la llamada de riesgo con ExecuteAsync. Polly la ejecuta y, si produce una excepción, vuelve a intentarlo hasta alcanzar el número configurado.
await pipeline.ExecuteAsync(async token =>
{
await httpClient.GetAsync("https://api.example.com/data", token);
});Decidir qué reintentar
Use ShouldHandle con un generador de predicados para reintentar únicamente ante excepciones o resultados específicos y evitar reintentos ante errores permanentes.
new RetryStrategyOptions<HttpResponseMessage>
{
ShouldHandle = new PredicateBuilder<HttpResponseMessage>()
.Handle<HttpRequestException>()
.HandleResult(r => r.StatusCode == HttpStatusCode.ServiceUnavailable),
MaxRetryAttempts = 3
};Espera constante frente a espera exponencial
Reintentar de inmediato puede sobrecargar un servicio que ya tiene problemas. La espera progresiva separa los intentos. Polly admite esperas constantes, lineales y exponenciales mediante la configuración BackoffType.
Espera exponencial
La espera exponencial duplica el retraso en cada intento (por ejemplo, 2 s, 4 s, 8 s). Configure BackoffType.Exponential con un Delay base.
new RetryStrategyOptions
{
MaxRetryAttempts = 4,
BackoffType = DelayBackoffType.Exponential,
Delay = TimeSpan.FromSeconds(2)
};Añadir variación aleatoria
Si muchos clientes reintentan siguiendo el mismo calendario, crean picos sincronizados (la «avalancha de solicitudes»). La variación aleatoria añade aleatoriedad a los retrasos. Habilite UseJitter = true.
new RetryStrategyOptions
{
MaxRetryAttempts = 4,
BackoffType = DelayBackoffType.Exponential,
Delay = TimeSpan.FromSeconds(1),
UseJitter = true
};Reaccionar ante cada reintento
La devolución de llamada OnRetry permite registrar los intentos o emitir métricas. Recibe el número de intento y el error que lo desencadenó.
new RetryStrategyOptions
{
MaxRetryAttempts = 3,
OnRetry = args =>
{
Console.WriteLine($"Retry {args.AttemptNumber} after {args.RetryDelay}");
return default;
}
};Limitar el tiempo total de reintento
Los reintentos ilimitados pueden hacer que el usuario espere demasiado. Combine el reintento con una estrategia de tiempo de espera (que se explica más adelante) o limite los intentos para que la operación falle rápidamente cuando la recuperación sea poco probable.
Reintentos para HttpClient
Para las llamadas HTTP, registre un controlador de resiliencia en HttpClient para que los reintentos se apliquen automáticamente a cada solicitud.
builder.Services.AddHttpClient("api")
.AddResilienceHandler("retry", pipeline =>
{
pipeline.AddRetry(new HttpRetryStrategyOptions
{
MaxRetryAttempts = 3,
BackoffType = DelayBackoffType.Exponential
});
});Comprobación rápida
Compruebe sus conocimientos sobre reintentos.
Resumen
Las políticas de reintento gestionan los errores transitorios volviendo a intentar una operación. En Polly v8 se construye un pipeline con AddRetry, se delimita su alcance con ShouldHandle y se espacian los intentos mediante BackoffType.Exponential junto con UseJitter. Use OnRetry para observar los intentos y registre un controlador de resiliencia para proteger cada llamada a HttpClient.
Aprende C# con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 93
- Lecciones
- 346
Preguntas frecuentes
¿La lección «Políticas de reintento» es gratis?
Sí — el texto completo de «Políticas de reintento» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Políticas de reintento»?
Reintente los errores transitorios con backoff. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C# Academy?
No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Políticas de reintento»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C# Academy?
Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Políticas de reintento
- Patrón Circuit Breaker
- Políticas de tiempo de espera y fallback
- Pipelines de resiliencia