Ich versuche zu verstehen, wo ich Try/Catch-Blöcke verwenden muss. Ist es sicher, nur einen try/catch um Task.WaitAll() unten zu legen, oder muss ich jeden Task mit einem try/catch, sowie dem Task.WaitAll() umgeben?C# Aufgabe, wo muss ich eine SystemAggregateException abfangen
Task<SomeResult> myTask1 = DoSomethingAsync1();
myTask1.ContinueWith(x =>
{
// Do something here;
}, TaskContinuationOptions.OnlyOnRanToCompletion);
Task<SomeResult> myTask2 = DoSomethingAsync2();
myTask2.ContinueWith(x =>
{
// Do something here;
}, TaskContinuationOptions.OnlyOnRanToCompletion);
// Some other code that executes while these tasks are running
Console.WriteLine("Hello World");
Task.WaitAll(myTask1, myTask2);
Aber eine Fortsetzungsaufgabe kann das Ergebnis einer Aufgabe ('x.Result') verwenden. Wenn ich diesen Fortsetzungsaufgaben einen Namen ("contTask1, contTask2") geben würde und nur "Task.WaitAll" (contTask1, contTask2) umgeben wäre, würde '' mit einem try/catch nicht auf 'x.result' innerhalb einer Fortsetzungsaufgabe zugreifen in der Lage sein, eine Ausnahme zu werfen? – blgrnboy
@blgrnboy Sie stellen dort einen Delegierten zur Verfügung. Sie rufen diesen Code gerade nicht in dem Moment auf, in dem er ausgeführt wird. Es wird auf einem anderen Thread ausgeführt und Sie erhalten das Ergebnis davon, wenn Sie es warten. Fortsetzen bedeutet, dass Sie sagen, was nach Abschluss eines Teils der Berechnung ausgeführt werden soll, ohne sich darum zu kümmern, ob es erfolgreich ist oder nicht. Sie werden es später finden, wenn Sie es abwarten. – greenshade
@blgrnboy Ja, es wird eine Ausnahme ausgelöst, aber Sie erfassen es nur, wenn Sie eine Aufgabe warten. – greenshade