0Pricing
C# Academy · Aula

Políticas de nova tentativa

Tente novamente após falhas transitórias, com espera progressiva.

Políticas de nova tentativa é uma aula grátis de C# Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C# Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C# Academy inclui 4 aulas no total.

O que é Polly?

Polly é uma biblioteca de resiliência para .NET que ajuda seus aplicativos a lidar com falhas transitórias, respostas lentas e dependências sobrecarregadas. Ela fornece estratégias como novas tentativas, disjuntor de circuito, tempo limite, alternativa e limitação de taxa.

Este curso usa o Polly v8 (a API Polly.Core).

dotnet add package Polly.Core

Por que Fazer Novas Tentativas?

Muitas falhas são transitórias: uma breve instabilidade de rede, um tempo limite momentâneo ou um serviço sendo reiniciado. Repetir a operação alguns instantes depois geralmente funciona, sem incomodar o usuário.

As novas tentativas devem ser direcionadas apenas a erros transitórios, nunca a erros permanentes como um 404.

Uma Estratégia Básica de Novas Tentativas

No Polly v8, você cria um ResiliencePipeline com um RetryStrategyOptions. Por padrão, uma exceção lançada aciona uma nova tentativa.

using Polly;
using Polly.Retry;

var pipeline = new ResiliencePipelineBuilder()
    .AddRetry(new RetryStrategyOptions
    {
        MaxRetryAttempts = 3
    })
    .Build();

Executar por Meio do Fluxo

Envolva a chamada arriscada com ExecuteAsync. O Polly a executa e, se ela lançar uma exceção, faz novas tentativas até a quantidade configurada.

await pipeline.ExecuteAsync(async token =>
{
    await httpClient.GetAsync("https://api.example.com/data", token);
});

Decidir o Que Repetir

Use ShouldHandle com um construtor de predicados para repetir apenas exceções ou resultados específicos, evitando novas tentativas para erros permanentes.

new RetryStrategyOptions<HttpResponseMessage>
{
    ShouldHandle = new PredicateBuilder<HttpResponseMessage>()
        .Handle<HttpRequestException>()
        .HandleResult(r => r.StatusCode == HttpStatusCode.ServiceUnavailable),
    MaxRetryAttempts = 3
};

Espera Constante ou Exponencial

Repetir instantaneamente pode sobrecarregar um serviço que já está com dificuldades. A espera progressiva espaça as tentativas. O Polly oferece espera constante, linear e exponencial por meio da configuração BackoffType.

Espera Exponencial

A espera exponencial dobra o atraso a cada tentativa (por exemplo, 2s, 4s, 8s). Defina BackoffType.Exponential com um Delay base.

new RetryStrategyOptions
{
    MaxRetryAttempts = 4,
    BackoffType = DelayBackoffType.Exponential,
    Delay = TimeSpan.FromSeconds(2)
};

Adicionar Aleatoriedade

Se muitos clientes fizerem novas tentativas na mesma programação, eles criarão picos sincronizados (o "efeito manada"). A aleatoriedade adiciona variação aos atrasos. Habilite UseJitter = true.

new RetryStrategyOptions
{
    MaxRetryAttempts = 4,
    BackoffType = DelayBackoffType.Exponential,
    Delay = TimeSpan.FromSeconds(1),
    UseJitter = true
};

Reagir a Cada Nova Tentativa

O retorno de chamada OnRetry permite registrar as tentativas ou gerar métricas. Ele recebe o número da tentativa e a falha que a acionou.

new RetryStrategyOptions
{
    MaxRetryAttempts = 3,
    OnRetry = args =>
    {
        Console.WriteLine($"Retry {args.AttemptNumber} after {args.RetryDelay}");
        return default;
    }
};

Limitar o Tempo Total de Novas Tentativas

Novas tentativas sem limite podem fazer o usuário esperar por tempo demais. Combine as novas tentativas com uma estratégia de tempo limite (abordada mais adiante) ou limite a quantidade de tentativas para que a operação falhe rapidamente quando a recuperação for improvável.

Novas Tentativas para HttpClient

Para chamadas HTTP, registre um manipulador de resiliência no HttpClient para que as novas tentativas sejam aplicadas automaticamente a todas as requisições.

builder.Services.AddHttpClient("api")
    .AddResilienceHandler("retry", pipeline =>
    {
        pipeline.AddRetry(new HttpRetryStrategyOptions
        {
            MaxRetryAttempts = 3,
            BackoffType = DelayBackoffType.Exponential
        });
    });

Verificação Rápida

Teste seus conhecimentos sobre novas tentativas.

Recapitulação

As políticas de novas tentativas lidam com falhas transitórias repetindo uma operação. No Polly v8, você cria um fluxo com AddRetry, delimita seu escopo com ShouldHandle e espaça as tentativas usando BackoffType.Exponential junto com UseJitter. Use OnRetry para observar as tentativas e registre um manipulador de resiliência para proteger todas as chamadas de HttpClient.

Perguntas Frequentes

A aula “Políticas de nova tentativa” é grátis?

Sim — o texto completo de “Políticas de nova tentativa” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C# Academy, atualize para CoddyKit PRO. O curso de C# Academy inclui 4 aulas no total.

O que vou aprender em “Políticas de nova tentativa”?

Tente novamente após falhas transitórias, com espera progressiva. Você pratica C# Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar C# Academy?

Nenhuma experiência prévia é necessária. C# Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Políticas de nova tentativa”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de C# Academy?

Sim. Cada aula de C# Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Políticas de nova tentativa
  2. Padrão disjuntor
  3. Políticas de tempo limite e alternativa
  4. Pipelines de resiliência
← Voltar para C# Academy