¿Quién canceló mi tarea?

Mi tarea de C # está siendo cancelada, pero no por mí. No obtengo un seguimiento de stack y no puedo averiguar dónde ocurre el problema.

Mi invocación de tarea se ve así:

var t = Task.Factory.StartNew(() => { Boolean bOk = DoSomthingImportant(); return bOk; }, TaskCreationOptions.AttachedToParent) .ContinueWith((theTask) => { var reason = theTask.IsCanceled ? "it was canceled" : "it faulted"; Debug.WriteLine("Error: Task ended because " + reason + "."); ... log the exception to one of my objects... return false; }, TaskContinuationOptions.NotOnRanToCompletion); 

Quiero que la tarea de continuación se ejecute si la tarea falló o se canceló, pero no si se ejecutó correctamente. La continuación nunca se ejecuta.

Más tarde, mi progtwig detecta una excepción AggregateException que está envolviendo una excepción TaskCanceledException.

Mi otra interacción importante con mis tareas es llamar a WaitAny (taskArray, timeout) hasta que no tenga más tareas que iniciar, luego llamar a WaitAll sin tiempo de espera hasta que finalice la última tarea.

¿Podría WaitAny con un tiempo de espera causar una cancelación? ¿Por qué no se llamó a mi continuación?

Este es solo mi segundo pincel con la biblioteca de tareas, así que no tengo ni idea.

ACTUALIZAR:

Encontré esta pregunta SO: Cómo propagar el estado cancelado de una tarea a una tarea de continuación. Un error en mi código anterior (pero no la causa de la Cancelación) es que asumí que el estado de las tareas de Continuación era el mismo que el estado de la tarea original. De hecho, tienes que hacer un trabajo para obtener el uno del otro, como describe la otra publicación.

ACTUALIZACIÓN 2:

Brian: Gracias por la referencia de documentación. Busqué entre las causas alta y baja de la cancelación de una tarea, pero me perdí estas palabras:

“Si está esperando una Tarea que pasa al estado Cancelado, se fabrica y lanza una Tarea (envuelta en una excepción AggregateException). Tenga en cuenta que esta excepción indica una cancelación exitosa en lugar de una situación defectuosa. Por lo tanto, la propiedad Excepción de la Tarea devuelve nula. ”

Está esperando la continuación y, dado que la tarea original se completó, la tarea de continuación se canceló. Este comportamiento está cubierto en la documentación .