Heim >Backend-Entwicklung >C++ >Wie kann ich Ausnahmen in C#-Aufgaben effektiv behandeln?
Im Bereich der asynchronen Programmierung ist die effektive Verwaltung von Ausnahmen von entscheidender Bedeutung. Bei der Arbeit mit System.Threading.Tasks.Task
C# 5.0 und höher: Async und Await to the Rescue
Mit der Einführung der revolutionären Schlüsselwörter „async“ und „await“ bieten C# 5.0 und höher eine vereinfachte Lösung für die Ausnahmebehandlung. Mit diesen Schlüsselwörtern können Sie Code auf lineare Weise schreiben, während der Compiler ihn übersetzt, um Aufgaben und asynchrone Programmiermuster zu verwenden.
Um diesen Ansatz zu verwenden, schließen Sie Ihren Code einfach in einen Try-Catch-Block innerhalb einer mit bezeichneten Methode ein das Schlüsselwort async.
try { // Start the task. var task = Task.Factory.StartNew<StateObject>(() => { /* action */ }); // Await the task. await task; } catch (Exception e) { // Perform cleanup here. }
C# 4.0 und niedriger: TaskContinuationOptions
Für frühere Versionen von C# können wir die ContinueWith-Überladung nutzen, die einen Parameter aus der TaskContinuationOptions-Enumeration akzeptiert. Dadurch können wir die Ausführungsbedingungen für die Fortsetzungsaufgabe festlegen.
Konkret stellt die Verwendung der Option „OnlyOnFaulted“ sicher, dass die Fortsetzungsaufgabe nur ausgeführt wird, wenn die Vorgängeraufgabe eine Ausnahme ausgelöst hat.
// Get the task. var task = Task.Factory.StartNew<StateObject>(() => { /* action */ }); // For error handling. task.ContinueWith(t => { /* error handling */ }, context, TaskContinuationOptions.OnlyOnFaulted);
Umgang mit nicht außergewöhnlichen Fällen
Um den nicht außergewöhnlichen Fall in C# zu behandeln 4.0 und niedriger können wir mehrere ContinueWith-Aufgaben für dieselbe Vorgängeraufgabe erstellen. Beispielsweise könnten wir eine Aufgabe haben, die nach erfolgreichem Abschluss ausgeführt wird:
// Get the task. var task = new Task<StateObject>(() => { /* action */ }); // For error handling. task.ContinueWith(t => { /* error handling */ }, context, TaskContinuationOptions.OnlyOnFaulted); // If it succeeded. task.ContinueWith(t => { /* on success */ }, context, TaskContinuationOptions.OnlyOnRanToCompletion); // Run task. task.Start();
Das obige ist der detaillierte Inhalt vonWie kann ich Ausnahmen in C#-Aufgaben effektiv behandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!