· PYO Tecnologia · Desenvolvimento .NET · 2 min de leitura
Resiliência em .NET: Indo Além do Retries com Polly
Falhas acontecem. A rede cai, o banco engasga. Sua aplicação .NET está pronta para isso? Um mergulho profundo no Polly.

Em sistemas distribuídos, a pergunta não é “se” vai falhar, mas “quando”. Uma API externa fora do ar não pode derrubar seu sistema inteiro.
O Polly é a biblioteca padrão para resiliência em .NET. Mas muitos devs param no Retry. Vamos ver padrões mais avançados.
1. Circuit Breaker: Pare de Bater em Quem Já Morreu
Se um serviço externo está fora do ar (retornando 503), ficar tentando a cada segundo só piora a situação (efeito manada) e trava suas threads.
O Circuit Breaker “abre o circuito” após X falhas, falhando imediatamente sem tentar chamar o serviço externo por um tempo. Isso dá tempo para o serviço se recuperar.
// Exemplo conceitual
pipeline.AddCircuitBreaker(new CircuitBreakerStrategyOptions
{
FailureRatio = 0.5, // Abriu se 50% falhar
SamplingDuration = TimeSpan.FromSeconds(10),
MinimumThroughput = 20,
BreakDuration = TimeSpan.FromSeconds(30) // Espera 30s antes de tentar de novo
});2. Fallback: Tenha um Plano B
Se o serviço de recomendação falhar, não mostre um erro 500. Mostre uma lista de produtos “Mais Vendidos” que está em cache. Isso é Fallback. Degradação graciosa da experiência.
3. Hedging: Aposta Dupla
Esse é para baixa latência. O Hedging faz uma requisição. Se ela demorar muito (mas não falhar), ele lança uma segunda requisição simultânea. A que voltar primeiro ganha. Útil quando você tem réplicas de leitura e uma pode estar lenta.
4. Rate Limiter: Proteja-se
Não deixe um cliente abusivo derrubar sua API. Use o Rate Limiter (agora nativo no .NET 7+, mas o Polly também tem) para limitar requisições por IP ou usuário.
A Nova Era: Polly v8
O Polly v8 foi reescrito para ser “zero allocation” e muito mais performático. A sintaxe mudou (Resilience Pipelines), ficando mais limpa e integrada com a injeção de dependência do .NET.
services.AddResiliencePipeline("default", builder =>
{
builder
.AddRetry(new RetryStrategyOptions { MaxRetryAttempts = 3 })
.AddTimeout(TimeSpan.FromSeconds(2));
});Conclusão
Resiliência é uma feature. Seu usuário não se importa se a AWS caiu, ele se importa se o app dele funciona. Use o Polly para garantir que funcione.
Construindo sistemas críticos? Arquitetura de alta disponibilidade e resiliência é fundamental. Fale com nossos engenheiros.


