Timeout- och fallback-policyer
Begränsa väntetider och tillhandahåll smidiga reservlösningar.
Timeout- och fallback-policyer är en gratis lektion i C# Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för C# Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C# Academy innehåller totalt 4 lektioner.
Varför timeouts är viktiga
Ett anrop som aldrig returnerar är värre än ett som misslyckas: det binder upp trådar och anslutningar. En timeout begränsar hur länge en operation får köras innan Polly avbryter den.
Lägga till en timeout
Polly v8 tillhandahåller AddTimeout. När gränsen överskrids kastas ett TimeoutRejectedException och den underliggande token avbryts.
using Polly.Timeout;
var pipeline = new ResiliencePipelineBuilder()
.AddTimeout(TimeSpan.FromSeconds(3))
.Build();Kooperativ avbrytning
Timeouten fungerar genom att avbryta den CancellationToken som skickas till er callback. Er kod måste respektera den token för att timeouten ska få effekt utan onödig fördröjning.
await pipeline.ExecuteAsync(async token =>
{
// token is cancelled when the timeout fires
await httpClient.GetAsync(url, token);
});Reagera på timeouts
Använd TimeoutStrategyOptions med en callback för OnTimeout för att logga eller skicka ut mätvärden när en operation avbryts i förtid.
new TimeoutStrategyOptions
{
Timeout = TimeSpan.FromSeconds(3),
OnTimeout = args =>
{
Console.WriteLine($"Timed out after {args.Timeout}");
return default;
}
};Vad är en fallback?
En fallback tillhandahåller ett ersättningsresultat när en operation misslyckas, så att användaren får en smidig, begränsad upplevelse i stället för ett fel: cachade data, ett standardvärde eller ett tydligt meddelande.
Lägga till en fallbackstrategi
AddFallback kräver en typad pipeline. Ni definierar vilka fel som ska hanteras och vilket värde som ska returneras i stället.
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();Returnera cachade data som fallback
Ett vanligt mönster är att visa det senast kända fungerande värdet från cachen när det aktiva anropet misslyckas, så att appen förblir responsiv.
FallbackAction = args =>
{
var cached = _cache.GetLastKnownGood();
return Outcome.FromResultAsValueTask(cached);
}Observera fallbacks
Callbacken OnFallback körs när fallbacken aktiveras och passar därför bra för att logga att en begränsad reservväg användes.
new FallbackStrategyOptions<string>
{
FallbackAction = args => Outcome.FromResultAsValueTask("default"),
OnFallback = args =>
{
Console.WriteLine("Fallback executed");
return default;
}
};Timeout och fallback tillsammans
Att kombinera dem är kraftfullt: en timeout begränsar väntetiden och en fallback tillhandahåller ett värde när timeouten, eller något annat hanterat fel, inträffar. Då hänger anrop aldrig och kraschar inte heller.
Välja rimliga timeouts
Ange timeouts utifrån realistisk svarstid plus marginal, inte utifrån godtyckligt små värden. Om gränsen är för snäv misslyckas fungerande anrop; om den är för generös motverkar den syftet.
Fallback är sista utvägen
Placera fallbacken som den yttersta strategin, så att den kan fånga fel från återförsök, kretsbrytare och timeouts. Då får anroparen alltid ett användbart resultat.
Snabbkontroll
Testa timeout- och fallbackstrategier.
Sammanfattning
Timeouts begränsar operationens varaktighet med AddTimeout, avbryter token och kastar TimeoutRejectedException (respektera token!). Fallbacks tillhandahåller ersättningsresultat via AddFallback med en FallbackAction och visar ofta cachade data. Tillsammans håller de appar responsiva: begränsa väntetiden och hantera sedan felet på ett smidigt sätt. Placera fallbacken ytterst så att den fångar alla hanterade fel.
Lär dig C# med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 93
- Lektioner
- 346
Vanliga frågor
Är lektionen ”Timeout- och fallback-policyer” gratis?
Ja – hela texten till ”Timeout- och fallback-policyer” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i C# Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i C# Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Timeout- och fallback-policyer”?
Begränsa väntetider och tillhandahåll smidiga reservlösningar. Ni övar på C# Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig C# Academy?
Du behöver inga förkunskaper. Utbildningen i C# Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Timeout- och fallback-policyer”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här C# Academy-lektionen?
Ja. Varje C# Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Återförsökspolicyer
- Circuit breaker-mönstret
- Timeout- och fallback-policyer
- Resilienspipelines