Abfangen von Ausnahmen, die innerhalb von System.Threading.Tasks.Task
Mit der Einführung der Schlüsselwörter „async“ und „await“ wird die Ausnahmebehandlung in Tasks verbessert deutlich einfacher. Sie können einen Try-Catch-Block innerhalb einer asynchronen Methode verwenden, um Ausnahmen wie folgt abzufangen:
try { var task = Task.Factory.StartNew<StateObject>(() => { /* action */ }); await task; } catch (Exception e) { // Perform cleanup here. }
Denken Sie daran, die Kapselungsmethode mit dem Schlüsselwort „async“ zu markieren, um die Verwendung von „await“ zu ermöglichen.
Für frühere C#-Versionen können Sie Ausnahmen mithilfe der ContinueWith-Überladung behandeln, die eine TaskContinuationOptions akzeptiert value:
var task = Task.Factory.StartNew<StateObject>(() => { /* action */ }); task.ContinueWith(t => { /* error handling */ }, context, TaskContinuationOptions.OnlyOnFaulted);
TaskContinuationOptions.OnlyOnFaulted gibt an, dass die Fortsetzung nur ausgeführt werden soll, wenn die Vorgängeraufgabe eine Ausnahme auslöst.
Sie können auch nicht außergewöhnliche Fälle mit mehreren Aufrufen von ContinueWith:
task.ContinueWith(t => { /* error handling */ }, context, TaskContinuationOptions.OnlyOnFaulted); task.ContinueWith(t => { /* on success */ }, context, TaskContinuationOptions.OnlyOnRanToCompletion); task.Start();
Das obige ist der detaillierte Inhalt vonWie gehe ich effektiv mit Ausnahmen in C#-Aufgaben um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!