Policy di retry
Ripeta i tentativi dopo errori temporanei applicando un backoff.
Policy di retry è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 4 lezioni in totale.
Cos'è Polly?
Polly è una libreria .NET per la resilienza che aiuta le applicazioni a gestire errori transitori, risposte lente e dipendenze sovraccariche. Fornisce strategie come retry, circuit breaker, timeout, fallback e limitazione della frequenza.
Questo corso usa Polly v8, ovvero l'API Polly.Core.
dotnet add package Polly.CorePerché usare il retry?
Molti errori sono transitori: un breve problema di rete, un timeout momentaneo o un servizio in fase di riavvio. Ripetere l'operazione qualche istante dopo spesso permette di completarla senza disturbare l'utente.
Il retry deve essere applicato solo agli errori transitori, mai a quelli permanenti come un 404.
Una strategia di retry di base
In Polly v8 si costruisce una ResiliencePipeline con una RetryStrategyOptions. Per impostazione predefinita, un'eccezione generata attiva un retry.
using Polly;
using Polly.Retry;
var pipeline = new ResiliencePipelineBuilder()
.AddRetry(new RetryStrategyOptions
{
MaxRetryAttempts = 3
})
.Build();Eseguire le chiamate tramite la pipeline
Avvolga la chiamata rischiosa con ExecuteAsync. Polly la esegue e, se genera un'eccezione, riprova fino al numero di volte configurato.
await pipeline.ExecuteAsync(async token =>
{
await httpClient.GetAsync("https://api.example.com/data", token);
});Decidere cosa ripetere
Usi ShouldHandle con un generatore di predicati per ripetere solo in presenza di eccezioni o risultati specifici, evitando i retry per gli errori permanenti.
new RetryStrategyOptions<HttpResponseMessage>
{
ShouldHandle = new PredicateBuilder<HttpResponseMessage>()
.Handle<HttpRequestException>()
.HandleResult(r => r.StatusCode == HttpStatusCode.ServiceUnavailable),
MaxRetryAttempts = 3
};Backoff costante o esponenziale
Riprovare immediatamente può sovraccaricare un servizio già in difficoltà. Il backoff distanzia i tentativi. Polly supporta backoff costante, lineare ed esponenziale tramite l'impostazione BackoffType.
Backoff esponenziale
Il backoff esponenziale raddoppia il ritardo a ogni tentativo, ad esempio 2 s, 4 s e 8 s. Imposti BackoffType.Exponential con un Delay di base.
new RetryStrategyOptions
{
MaxRetryAttempts = 4,
BackoffType = DelayBackoffType.Exponential,
Delay = TimeSpan.FromSeconds(2)
};Aggiungere il jitter
Se molti client riprovano secondo lo stesso programma, creano picchi sincronizzati, il cosiddetto «thundering herd». Il jitter aggiunge casualità ai ritardi. Abiliti UseJitter = true.
new RetryStrategyOptions
{
MaxRetryAttempts = 4,
BackoffType = DelayBackoffType.Exponential,
Delay = TimeSpan.FromSeconds(1),
UseJitter = true
};Reagire a ogni retry
Il callback OnRetry consente di registrare i tentativi o generare metriche. Riceve il numero del tentativo e l'errore che lo ha attivato.
new RetryStrategyOptions
{
MaxRetryAttempts = 3,
OnRetry = args =>
{
Console.WriteLine($"Retry {args.AttemptNumber} after {args.RetryDelay}");
return default;
}
};Limitare la durata totale dei retry
I retry senza limiti possono costringere l'utente ad attendere troppo a lungo. Combini il retry con una strategia di timeout, descritta più avanti, oppure limiti il numero di tentativi, così l'operazione termina rapidamente quando è improbabile che si riprenda.
Retry per HttpClient
Per le chiamate HTTP, registri un gestore di resilienza su HttpClient, in modo che i retry vengano applicati automaticamente a ogni richiesta.
builder.Services.AddHttpClient("api")
.AddResilienceHandler("retry", pipeline =>
{
pipeline.AddRetry(new HttpRetryStrategyOptions
{
MaxRetryAttempts = 3,
BackoffType = DelayBackoffType.Exponential
});
});Controllo rapido
Verifichi la Sua conoscenza del retry.
Riepilogo
I criteri di retry gestiscono gli errori transitori ripetendo un'operazione. In Polly v8 si costruisce una pipeline con AddRetry, la si limita con ShouldHandle e si distanziano i tentativi usando BackoffType.Exponential insieme a UseJitter. Usi OnRetry per osservare i tentativi e registri un gestore di resilienza per proteggere ogni chiamata a HttpClient.
Impara C# con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 93
- Lezioni
- 346
Domande Frequenti
La lezione «Policy di retry» è gratuita?
Sì — il testo completo di «Policy di retry» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 4 lezioni in totale.
Cosa imparerò in «Policy di retry»?
Ripeta i tentativi dopo errori temporanei applicando un backoff. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C# Academy?
Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Policy di retry»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C# Academy?
Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.