csharp / expert
Snippet
Strategische Exception-Filterung mit kontextbezogenen Guards
Fehlerbehandlung auf Expertenniveau nutzt in C# das Schlüsselwort 'when', um Exceptions zu filtern, ohne den Stack abzubauen. Dies ist effizienter als das Abfangen und erneute Werfen, da der ursprüngliche Stacktrace erhalten bleibt und komplexe Logik zur Entscheidung über die Ausführung des Catch-Blocks ermöglicht.
snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class ResilienceHandler{public static void ExecuteWithRetry(Action action, int maxRetries){int attempts = 0;while (true){try{action();break;}catch (Exception ex) when (attempts < maxRetries && IsTransient(ex)){attempts++;Console.WriteLine($"Transient error detected. Retry {attempts}/{maxRetries}.");}}}private static bool IsTransient(Exception ex) =>ex is TimeoutException || (ex is InvalidOperationException ioe && ioe.Message.Contains("Retryable"));}
Erklärung
1
catch (Exception ex) when (attempts < maxRetries && IsTransient(ex))
Wendet einen bedingten Filter an, der die Exception nur abfängt, wenn das Retry-Limit nicht erreicht und der Fehler vorübergehend ist.
2
private static bool IsTransient(Exception ex) => ...
Kapselt komplexe Logik zur Identifizierung behebbarer Fehler basierend auf Typ und internem Status.