Zasady limitu czasu i wartości zastępczych
Ograniczaj czas oczekiwania i zapewniaj kontrolowane wartości zastępcze.
Zasady limitu czasu i wartości zastępczych to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 3 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.
Dlaczego limity czasu mają znaczenie
Wywołanie, które nigdy nie zwraca wyniku, jest gorsze od takiego, które kończy się błędem: zajmuje wątki i połączenia. Strategia timeout ogranicza czas działania operacji, zanim Polly ją anuluje.
Dodawanie limitu czasu
Polly v8 udostępnia metodę AddTimeout. Po przekroczeniu limitu zgłasza ona TimeoutRejectedException i anuluje bazowy token.
using Polly.Timeout;
var pipeline = new ResiliencePipelineBuilder()
.AddTimeout(TimeSpan.FromSeconds(3))
.Build();Anulowanie kooperatywne
Limit czasu działa przez anulowanie obiektu CancellationToken przekazanego do wywołania zwrotnego. Kod musi respektować ten token, aby limit czasu zadziałał bez zbędnej zwłoki.
await pipeline.ExecuteAsync(async token =>
{
// token is cancelled when the timeout fires
await httpClient.GetAsync(url, token);
});Reagowanie na przekroczenia limitu czasu
Użyj TimeoutStrategyOptions wraz z wywołaniem zwrotnym OnTimeout, aby rejestrować zdarzenia lub wysyłać metryki, gdy operacja zostanie przedwcześnie przerwana.
new TimeoutStrategyOptions
{
Timeout = TimeSpan.FromSeconds(3),
OnTimeout = args =>
{
Console.WriteLine($"Timed out after {args.Timeout}");
return default;
}
};Czym jest fallback?
Fallback zapewnia zastępczy wynik, gdy operacja się nie powiedzie, dzięki czemu użytkownik otrzymuje płynnie działającą, choć ograniczoną funkcjonalność zamiast błędu: dane z pamięci podręcznej, wartość domyślną lub przyjazny komunikat.
Dodawanie strategii fallback
AddFallback wymaga typowanego potoku. Określasz, które awarie mają być obsługiwane oraz jaką wartość należy zwrócić w zamian.
using Polly.Fallback;
var pipeline = new ResiliencePipelineBuilder<string>()
.AddFallback(new FallbackStrategyOptions<string>
{
ShouldHandle = new PredicateBuilder<string>()
.Handle<HttpRequestException>(),
FallbackAction = args =>
Outcome.FromResultAsValueTask("cached default")
})
.Build();Zwracanie danych z pamięci podręcznej jako fallback
Typowym rozwiązaniem jest udostępnienie z pamięci podręcznej ostatniej znanej poprawnej wartości, gdy wywołanie działającej usługi się nie powiedzie. Dzięki temu aplikacja pozostaje responsywna.
FallbackAction = args =>
{
var cached = _cache.GetLastKnownGood();
return Outcome.FromResultAsValueTask(cached);
}Monitorowanie fallbacków
Wywołanie zwrotne OnFallback jest uruchamiane, gdy zadziała fallback, dzięki czemu idealnie nadaje się do rejestrowania informacji o przejściu na ścieżkę zdegradowanej obsługi.
new FallbackStrategyOptions<string>
{
FallbackAction = args => Outcome.FromResultAsValueTask("default"),
OnFallback = args =>
{
Console.WriteLine("Fallback executed");
return default;
}
};Łączenie limitu czasu z fallbackiem
Połączenie tych strategii jest bardzo skuteczne: limit czasu ogranicza oczekiwanie, a fallback dostarcza wartość, gdy limit czasu lub dowolna inna obsługiwana awaria wystąpi, dzięki czemu wywołania nigdy nie zawieszają się ani nie kończą błędem.
Dobór rozsądnych limitów czasu
Ustawiaj limity czasu na podstawie realistycznych opóźnień z odpowiednim zapasem, a nie arbitralnie małych wartości. Zbyt restrykcyjne limity powodują niepowodzenia poprawnych wywołań, a zbyt długie niweczą sens ich stosowania.
Fallback jako ostateczność
Umieść fallback jako najbardziej zewnętrzną strategię, aby mógł przechwytywać awarie pochodzące zarówno z ponowień, circuit breakera, jak i limitów czasu, gwarantując wywołującemu zawsze użyteczny wynik.
Szybki test
Przetestuj strategie limitu czasu i fallback.
Podsumowanie
Limity czasu ograniczają czas trwania operacji za pomocą AddTimeout, anulując token i zgłaszając TimeoutRejectedException — pamiętaj, aby respektować token. Fallbacki dostarczają zastępcze wyniki za pomocą AddFallback i FallbackAction, często udostępniając dane z pamięci podręcznej. Razem utrzymują responsywność aplikacji: najpierw ograniczają oczekiwanie, a następnie zapewniają płynne działanie w trybie ograniczonym. Umieść fallback na zewnątrz, aby przechwytywał wszystkie obsługiwane awarie.
Często zadawane pytania
Czy lekcja „Zasady limitu czasu i wartości zastępczych” jest bezpłatna?
Tak — pełny tekst „Zasady limitu czasu i wartości zastępczych” 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 limitu czasu i wartości zastępczych”?
Ograniczaj czas oczekiwania i zapewniaj kontrolowane wartości zastępcze. Ć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 3 z 4.
Ile czasu zajmuje lekcja „Zasady limitu czasu i wartości zastępczych”?
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
- Zasady ponawiania prób
- Wzorzec circuit breaker
- Zasady limitu czasu i wartości zastępczych
- Potoki odporności