Wie die Verwaltung richtig eine Ausnahme, in der eine Aufgabe mit ContinueWith
Nach dem Lesen der Informationen über die Aufgabe und exepcion management, bin ich mit diesem code zu verwalten, eine Ausnahme in einer Aufgabe:
Task<Object> myTask = Task.Factory.StartNew<Object>(doTask, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default);
myTask .ContinueWith(task => afterTask(task), TaskScheduler.FromCurrentSynchronizationContext());
Wo doTask und AfterTask sind:
private <Object> doTask() {
throw new Exception("BOOM");
}
private afterTask(Task<Object> aTask) {
if (aTask.IsFaulted)
{
MessageBox.Show(aTask.Exception.InnerException.Message);
}
else //whatever
}
Als Ausnahme-Boom ausgelöst der Visual Studio zeigt eine Warnung, die darüber informiert, dass eine Ausnahme nicht gefangen wurde, aber wenn ich weiterhin in der Ausführung der Ausnahme erfolgt in der afterTask Funktion.
Ist dieser code richtig oder ich missverstanden werden einige grundlegende Verhalten der Aufgabe? Gibt es eine Möglichkeit zu vermeiden, die Warnung des Debuggers, dass die execption hat nicht gefangen wurden? Ist ein bisschen nervig...
Vielen Dank im Voraus
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Mithilfe der
TaskContinuationOptions.OnlyOnFaulted
führen Sie IhreContinueWith
block nur, wenn eine Ausnahme geworfen wird, die von der ursprünglichen Aufgabe.Nachholen, können Sie wählen, ob Sie true oder false zurückgeben von der lambda-Ausdruck übergeben
Handle
, der angibt, ob die exception behandelt wurde oder nicht. In meinem Fall, ich wollte gar nicht mehr aufhören die Ausnahme von der Propagierung. Möchten Sie vielleicht, es zu ändern zurücktrue
in Ihrem Fall.ContinueWith
task wird nur ausgeführt, wenn eine Ausnahme geworfen wird. In der Probe, die Sie geschrieben, die Aufgabe würde immer ausgeführt werden. Der zweite Vorteil ist die Lesbarkeit. Um zu verhindern, dass diese VS-popups, ich würde versuchen Sie dies: stackoverflow.com/questions/2173997/...