Retry-politikker
Prøv igen ved midlertidige fejl med backoff.
Retry-politikker er en gratis C# Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i C# Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C# Academy-kurset indeholder 4 lektioner i alt.
Hvad er Polly?
Polly er et .NET-resiliensbibliotek, der hjælper dine apps med at håndtere forbigående fejl, langsomme svar og overbelastede afhængigheder. Det indeholder strategier som gentagelse, afbryder, tidsgrænse, reserveplan og hastighedsbegrænsning.
Dette kursus bruger Polly v8 (API'et Polly.Core).
dotnet add package Polly.CoreHvorfor gentage?
Mange fejl er forbigående: et kortvarigt netværksudfald, en kortvarig tidsgrænse eller en tjeneste, der genstarter. Hvis du gentager handlingen et øjeblik senere, lykkes det ofte uden at forstyrre brugeren.
Gentagelser bør kun målrettes forbigående fejl, aldrig permanente fejl som 404.
En grundlæggende gentagelsesstrategi
I Polly v8 opbygger du en ResiliencePipeline med en RetryStrategyOptions. Som standard udløser en kastet undtagelse et nyt forsøg.
using Polly;
using Polly.Retry;
var pipeline = new ResiliencePipelineBuilder()
.AddRetry(new RetryStrategyOptions
{
MaxRetryAttempts = 3
})
.Build();Kørsel gennem kæden
Pak det risikable kald ind i ExecuteAsync. Polly kører det, og hvis det kaster en undtagelse, prøver Polly igen op til det konfigurerede antal gange.
await pipeline.ExecuteAsync(async token =>
{
await httpClient.GetAsync("https://api.example.com/data", token);
});Beslut, hvad der skal gentages
Brug ShouldHandle sammen med en prædikatbygger til kun at gentage ved bestemte undtagelser eller resultater, så du undgår gentagelser ved permanente fejl.
new RetryStrategyOptions<HttpResponseMessage>
{
ShouldHandle = new PredicateBuilder<HttpResponseMessage>()
.Handle<HttpRequestException>()
.HandleResult(r => r.StatusCode == HttpStatusCode.ServiceUnavailable),
MaxRetryAttempts = 3
};Konstant eller eksponentiel ventetid
Hvis du prøver igen med det samme, kan du overbelaste en presset tjeneste. Ventetid mellem forsøg spreder forsøgene ud. Polly understøtter konstant, lineær og eksponentiel ventetid via indstillingen BackoffType.
Eksponentiel ventetid
Eksponentiel ventetid fordobler forsinkelsen ved hvert forsøg, for eksempel 2 sekunder, 4 sekunder og 8 sekunder. Indstil BackoffType.Exponential med en grundforsinkelse i Delay.
new RetryStrategyOptions
{
MaxRetryAttempts = 4,
BackoffType = DelayBackoffType.Exponential,
Delay = TimeSpan.FromSeconds(2)
};Tilføj tilfældighed
Hvis mange klienter prøver igen efter samme tidsplan, skaber de synkroniserede spidsbelastninger, det såkaldte flokproblem. Tilfældighed tilføjer variation til forsinkelserne. Aktivér UseJitter = true.
new RetryStrategyOptions
{
MaxRetryAttempts = 4,
BackoffType = DelayBackoffType.Exponential,
Delay = TimeSpan.FromSeconds(1),
UseJitter = true
};Reagér ved hvert nyt forsøg
Tilbagekaldet OnRetry lader dig skrive forsøg til loggen eller udsende målinger. Det modtager forsøgsnummeret og den fejl, der udløste forsøget.
new RetryStrategyOptions
{
MaxRetryAttempts = 3,
OnRetry = args =>
{
Console.WriteLine($"Retry {args.AttemptNumber} after {args.RetryDelay}");
return default;
}
};Begræns den samlede gentagelsestid
Ubegrænsede gentagelser kan få en bruger til at vente for længe. Kombinér gentagelse med en strategi med tidsgrænse, som gennemgås senere, eller begræns antallet af forsøg, så handlingen hurtigt mislykkes, når genopretning er usandsynlig.
Gentagelser for HttpClient
Ved HTTP-kald skal du registrere en resiliensbehandler på HttpClient, så gentagelser automatisk gælder for hver anmodning.
builder.Services.AddHttpClient("api")
.AddResilienceHandler("retry", pipeline =>
{
pipeline.AddRetry(new HttpRetryStrategyOptions
{
MaxRetryAttempts = 3,
BackoffType = DelayBackoffType.Exponential
});
});Hurtigt tjek
Afprøv din viden om gentagelser.
Opsummering
Gentagelsespolitikker håndterer forbigående fejl ved at udføre en handling igen. I Polly v8 opbygger du en kæde med AddRetry, begrænser den med ShouldHandle og fordeler forsøgene med BackoffType.Exponential plus UseJitter. Brug OnRetry til at observere forsøg, og registrér en resiliensbehandler for at beskytte hvert kald til HttpClient.
Lær C# med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 93
- Lektioner
- 346
Ofte stillede spørgsmål
Er lektionen “Retry-politikker” gratis?
Ja — hele teksten til “Retry-politikker” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af C# Academy-kurset, skal du opgradere til CoddyKit PRO. C# Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Retry-politikker”?
Prøv igen ved midlertidige fejl med backoff. Du øver dig i C# Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på C# Academy?
Der kræves ingen tidligere erfaring. C# Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Retry-politikker”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne C# Academy-lektion?
Ja. Alle C# Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.