0Pricing
C# Academy · Lekcja

Zasady ponawiania prób

Ponawiaj próby po przejściowych awariach z wykładniczym opóźnieniem.

Zasady ponawiania prób to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.

Czym jest Polly?

Polly to biblioteka .NET zapewniająca odporność aplikacji, która pomaga radzić sobie z przejściowymi awariami, powolnymi odpowiedziami i przeciążonymi zależnościami. Udostępnia strategie takie jak ponawianie, circuit breaker, limit czasu, fallback i ograniczanie przepustowości.

W tym kursie używana jest wersja Polly v8 (interfejs API Polly.Core).

dotnet add package Polly.Core

Dlaczego ponawiać?

Wiele awarii ma charakter przejściowy: krótkotrwałe zakłócenia sieci, chwilowe przekroczenie limitu czasu lub ponowne uruchamianie usługi. Ponowienie operacji chwilę później często kończy się powodzeniem bez niepokojenia użytkownika.

Ponawianie powinno dotyczyć wyłącznie błędów przejściowych, a nigdy trwałych, takich jak 404.

Podstawowa strategia ponawiania

W Polly v8 potok ResiliencePipeline buduje się za pomocą RetryStrategyOptions. Domyślnie rzucony wyjątek powoduje ponowienie.

using Polly;
using Polly.Retry;

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

Wykonywanie za pośrednictwem potoku

Niepewne wywołanie należy opakować za pomocą ExecuteAsync. Polly je uruchamia, a jeśli wywołanie zgłosi wyjątek, ponawia je maksymalnie tyle razy, ile skonfigurowano.

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

Decydowanie, co ponawiać

Użyj ShouldHandle wraz z konstruktorem predykatu, aby ponawiać operacje tylko dla określonych wyjątków lub wyników i unikać ponowień w przypadku trwałych błędów.

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

Stały a wykładniczy backoff

Natychmiastowe ponawianie może przeciążyć już obciążoną usługę. Mechanizm backoff rozdziela próby w czasie. Polly obsługuje backoff stały, liniowy i wykładniczy za pomocą ustawienia BackoffType.

Wykładniczy backoff

Wykładniczy backoff podwaja opóźnienie przy każdej próbie, na przykład 2 s, 4 s, 8 s. Ustaw BackoffType.Exponential oraz bazowe Delay.

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

Dodawanie jittera

Jeśli wielu klientów ponawia żądania według tego samego harmonogramu, powodują zsynchronizowane skoki obciążenia, czyli efekt „thundering herd”. Jitter dodaje losowość do opóźnień. Włącz opcję UseJitter = true.

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

Reagowanie przy każdym ponowieniu

Wywołanie zwrotne OnRetry umożliwia rejestrowanie prób lub wysyłanie metryk. Otrzymuje ono numer próby oraz błąd, który ją wywołał.

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

Ograniczanie łącznego czasu ponawiania

Nieograniczone ponowienia mogą zbyt długo wstrzymywać użytkownika. Połącz ponawianie ze strategią limitu czasu, omówioną później, albo ogranicz liczbę prób, aby operacja szybko się nie powiodła, gdy szanse na odzyskanie działania są niewielkie.

Ponawianie dla HttpClient

W przypadku wywołań HTTP zarejestruj handler odporności dla HttpClient, aby ponowienia były automatycznie stosowane do każdego żądania.

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

Szybki test

Sprawdź swoją wiedzę na temat ponawiania.

Podsumowanie

Polityki ponawiania obsługują przejściowe awarie, ponawiając operację. W Polly v8 budujesz potok za pomocą AddRetry, określasz obsługiwane przypadki przez ShouldHandle i rozdzielasz próby w czasie, używając BackoffType.Exponential wraz z UseJitter. Użyj OnRetry, aby obserwować próby, i zarejestruj handler odporności, aby chronić każde wywołanie HttpClient.

Często zadawane pytania

Czy lekcja „Zasady ponawiania prób” jest bezpłatna?

Tak — pełny tekst „Zasady ponawiania prób” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Zasady ponawiania prób”?

Ponawiaj próby po przejściowych awariach z wykładniczym opóźnieniem. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Zasady ponawiania prób”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Zasady ponawiania prób
  2. Wzorzec circuit breaker
  3. Zasady limitu czasu i wartości zastępczych
  4. Potoki odporności
← Powrót do C# Academy