Existen varias maneras de observar las excepciones lanzadas dentro de las tareas. Uno de ellos es en un ContinueWith con OnlyOnFaulted:Observación de excepciones de tareas dentro de un ContinuarCon
var task = Task.Factory.StartNew(() =>
{
// Throws an exception
// (possibly from within another task spawned from within this task)
});
var failureTask = task.ContinueWith((t) =>
{
// Flatten and loop (since there could have been multiple tasks)
foreach (var ex in t.Exception.Flatten().InnerExceptions)
Console.WriteLine(ex.Message);
}, TaskContinuationOptions.OnlyOnFaulted);
Mi pregunta: ¿Las excepciones se convierten observaron de forma automática una vez que comienza failureTask O es que sólo llegan a ser observada una vez que 'toque' ex.Message?
¿Qué quiere decir por observado? Su delegado de ContinueWith solo se llamará una vez, si eso es lo que quiere decir, independientemente de si accede al objeto de excepción o no. –
Quizás él quiere decir "¿volverá a lanzar la excepción si simplemente llamo a' OnlyOnFaulted' independientemente de tener acceso a 't.Exceptions'"? – user7116
Si no "observa" las excepciones (esta es la terminología de Microsoft) lanzadas desde Tareas, entonces el recolector de basura las arrojará en un momento posterior. Mi delegado de ContinueWith seguramente podría ser llamado varias veces (si varias tareas desde mi tarea principal arrojan excepciones) ... ¿o podría llamarse con un árbol AggregateException con todas las excepciones arrojadas? – davenewza