valid - comments code c#
Esperar en una tarea con una continuación solo activada provoca una excepción agregada (1)
Tengo un código simple como repro
var taskTest = Task.Factory.StartNew(() =>
{
System.Threading.Thread.Sleep(5000);
}).ContinueWith((Task t) =>
{
Console.WriteLine("ERR");
}, TaskContinuationOptions.OnlyOnFaulted);
try
{
Task.WaitAll(taskTest);
}
catch (AggregateException ex)
{
foreach (var e in ex.InnerExceptions)
Console.WriteLine(e.Message + Environment.NewLine + e.StackTrace);
}
Sin embargo, estoy obteniendo una TaskCanceledException inesperada en el bloque try catch (está en el objeto AggregateException InnerExceptions). "Una tarea fue cancelada".
¿Por qué recibo esta excepción? La Continuación de la tarea nunca se dispara, no hubo ninguna excepción generada por ella, sin embargo, sigo recibiendo la excepción agregada al esperar ...
Espero que alguien pueda explicar cómo esto tiene sentido para mí :)
No está esperando una tarea con una continuación OnlyOnFaulted; está esperando esa continuación (devuelta por ContinueWith
). La continuación nunca se disparará porque la tarea original se devolvió normalmente, por lo que actúa como si se hubiera cancelado.
Tiene sentido para mi.
Sospecho que quieres crear la tarea, agregar la continuación, pero luego esperar en la tarea original :
var taskTest = Task.Factory.StartNew(() =>
{
System.Threading.Thread.Sleep(5000);
});
taskTest.ContinueWith((Task t) =>
{
Console.WriteLine("ERR");
}, TaskContinuationOptions.OnlyOnFaulted);