Retry-Richtlinien
Wiederholen Sie vorübergehende Fehler mit Backoff.
Retry-Richtlinien ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist Polly?
Polly ist eine .NET-Bibliothek für Resilienz, die Ihren Anwendungen hilft, mit vorübergehenden Fehlern, langsamen Antworten und überlasteten Abhängigkeiten umzugehen. Sie bietet Strategien wie Wiederholungsversuche, Circuit Breaker, Timeouts, Fallbacks und Ratenbegrenzung.
In diesem Kurs wird Polly v8 (die Polly.Core-API) verwendet.
dotnet add package Polly.CoreWarum Wiederholungsversuche?
Viele Fehler sind vorübergehend: eine kurze Netzwerkstörung, ein kurzzeitiges Timeout oder ein Dienst, der gerade neu gestartet wird. Wenn Sie den Vorgang einen Moment später wiederholen, gelingt er oft, ohne dass der Benutzer etwas davon bemerkt.
Wiederholungsversuche sollten nur auf vorübergehende Fehler angewendet werden, niemals auf dauerhafte Fehler wie einen 404.
Eine einfache Wiederholungsstrategie
In Polly v8 erstellen Sie eine ResiliencePipeline mit RetryStrategyOptions. Standardmäßig löst eine ausgelöste Ausnahme einen erneuten Versuch aus.
using Polly;
using Polly.Retry;
var pipeline = new ResiliencePipelineBuilder()
.AddRetry(new RetryStrategyOptions
{
MaxRetryAttempts = 3
})
.Build();Ausführung über die Pipeline
Umschließen Sie den riskanten Aufruf mit ExecuteAsync. Polly führt ihn aus und wiederholt ihn bei einer Ausnahme bis zur konfigurierten Anzahl von Versuchen.
await pipeline.ExecuteAsync(async token =>
{
await httpClient.GetAsync("https://api.example.com/data", token);
});Festlegen, was wiederholt wird
Verwenden Sie ShouldHandle mit einem Predicate Builder, um nur bestimmte Ausnahmen oder Ergebnisse erneut zu verarbeiten und Wiederholungsversuche bei dauerhaften Fehlern zu vermeiden.
new RetryStrategyOptions<HttpResponseMessage>
{
ShouldHandle = new PredicateBuilder<HttpResponseMessage>()
.Handle<HttpRequestException>()
.HandleResult(r => r.StatusCode == HttpStatusCode.ServiceUnavailable),
MaxRetryAttempts = 3
};Konstantes oder exponentielles Backoff
Werden Aufrufe sofort wiederholt, kann das einen angeschlagenen Dienst zusätzlich belasten. Backoff vergrößert die Abstände zwischen den Versuchen. Polly unterstützt konstantes, lineares und exponentielles Backoff über die Einstellung BackoffType.
Exponentielles Backoff
Exponentielles Backoff verdoppelt die Verzögerung bei jedem Versuch, zum Beispiel 2 s, 4 s und 8 s. Setzen Sie BackoffType.Exponential mit einer Basisverzögerung über Delay.
new RetryStrategyOptions
{
MaxRetryAttempts = 4,
BackoffType = DelayBackoffType.Exponential,
Delay = TimeSpan.FromSeconds(2)
};Jitter hinzufügen
Wenn viele Clients nach demselben Zeitplan erneut versuchen, erzeugen sie synchronisierte Lastspitzen, den sogenannten „Thundering Herd“. Jitter fügt den Verzögerungen Zufälligkeit hinzu. Aktivieren Sie UseJitter = true.
new RetryStrategyOptions
{
MaxRetryAttempts = 4,
BackoffType = DelayBackoffType.Exponential,
Delay = TimeSpan.FromSeconds(1),
UseJitter = true
};Auf jeden Wiederholungsversuch reagieren
Mit dem OnRetry-Callback können Sie Versuche protokollieren oder Metriken ausgeben. Er erhält die Nummer des Versuchs und den Fehler, der ihn ausgelöst hat.
new RetryStrategyOptions
{
MaxRetryAttempts = 3,
OnRetry = args =>
{
Console.WriteLine($"Retry {args.AttemptNumber} after {args.RetryDelay}");
return default;
}
};Die gesamte Wiederholungszeit begrenzen
Unbegrenzte Wiederholungsversuche können einen Benutzer zu lange warten lassen. Kombinieren Sie Wiederholungsversuche mit einer Timeout-Strategie, die später behandelt wird, oder begrenzen Sie die Anzahl der Versuche, damit der Vorgang schnell fehlschlägt, wenn eine Wiederherstellung unwahrscheinlich ist.
Wiederholungsversuche für HttpClient
Bei HTTP-Aufrufen registrieren Sie einen Resilienz-Handler für den HttpClient, damit Wiederholungsversuche automatisch für jede Anfrage gelten.
builder.Services.AddHttpClient("api")
.AddResilienceHandler("retry", pipeline =>
{
pipeline.AddRetry(new HttpRetryStrategyOptions
{
MaxRetryAttempts = 3,
BackoffType = DelayBackoffType.Exponential
});
});Kurzer Check
Testen Sie Ihr Wissen über Wiederholungsversuche.
Zusammenfassung
Wiederholungsrichtlinien behandeln vorübergehende Fehler, indem sie einen Vorgang erneut ausführen. In Polly v8 erstellen Sie mit AddRetry eine Pipeline, legen mit ShouldHandle fest, welche Fehler behandelt werden, und vergrößern die Abstände zwischen den Versuchen mit BackoffType.Exponential und UseJitter. Verwenden Sie OnRetry, um Versuche zu beobachten, und registrieren Sie einen Resilienz-Handler, um jeden HttpClient-Aufruf zu schützen.
Häufig gestellte Fragen
Ist die Lektion „Retry-Richtlinien“ kostenlos?
Ja — der vollständige Text von „Retry-Richtlinien“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Retry-Richtlinien“?
Wiederholen Sie vorübergehende Fehler mit Backoff. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C# Academy zu starten?
Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Retry-Richtlinien“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?
Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.