Ich studierte this article on MSDN, sowie einige Fragen/Antworten zu SO zu diesem Thema, kann aber nicht verstehen, warum unten Code nicht funktioniert (in einer Beispielkonsole App).Wie behandelt man Ausnahmen in Aufgaben mit Debugger?
Es wird erwartet, dass AggregateException entsprechend MSDN ausgelöst wird, die eine interne Ausnahme mit hello
Nachricht enthalten würde. Stattdessen wird diese Ausnahme hello
nicht behandelt. Es passiert, wenn Sie in einem Debugger sind.
Wenn Sie Fortfahren drücken oder eigenständig ausführen, funktioniert es wie erwartet. Gibt es eine Möglichkeit zu vermeiden, die ganze Zeit in VS zu drücken? Schließlich wird alles, was innerhalb eines Try...Catch
Blocks ist, als behandelt in einem einzigen Thread-Programmiermodell behandelt. Andernfalls könnte das Debugging ein Albtraum sein.
VB.NET
Sub Main()
Try
Task.Factory.StartNew(AddressOf TaskThatThrowsException).Wait()
Catch ex As AggregateException
Console.WriteLine(ex.ToString) 'does not get here until you hit Continue
End Try
End Sub
Private Sub TaskThatThrowsException()
Throw New Exception("hello") 'exception was unhandled
End Sub
C#
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
try {
Task.Factory.StartNew(TaskThatThrowsException).Wait();
}
catch (AggregateException ex) {
Console.WriteLine(ex.ToString()); //never gets here
}
}
static void TaskThatThrowsException() {
throw new Exception("hello"); //exception was unhandled
}
}
}
Gibt es etwas offensichtlich, dass ich hier bin fehlt?
Stellen Sie den Debugger auf alle Ausnahmen zu stoppen. Wo hört es auf? Es sollte in 'TaskThatThrowsException' und in' Wait' stoppen. – usr
@usr: selbst jetzt stoppt es bei 'Throw New Exception (" hallo ")' line, die Überprüfung aller Geworfen macht es nicht besser. Ich möchte, dass es dabei nicht aufhört, sondern vielmehr Console.WriteLine. Andernfalls könnte das Debugging ein Albtraum sein. – Neolisk
Ausnahmen von Aufgaben erscheinen nicht in StartNew, nur in .Wait(). Dim myTask = Task.Factory.StartNew (...) Versuche MyTask.Wait() Catch ... – adrianm