Quem cancelou minha tarefa?

Minha tarefa c # está sendo cancelada, mas não por mim. Eu não consigo um stacktrace e não consigo descobrir onde o problema ocorre.

Minha chamada de tarefa é assim:

var t = Task<Boolean>.Factory.StartNew(() =>
    {
        Boolean bOk = DoSomthingImportant();
        return bOk;
    }, TaskCreationOptions.AttachedToParent)
    .ContinueWith<Boolean>((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);

Eu quero que a tarefa de continuação seja executada se a tarefa tiver falhado ou for cancelada, mas não se correu bem. A continuação nunca é executada.

Posteriormente, meu programa captura uma AggregateException que envolve uma TaskCanceledException.

Minha outra grande interação com minhas tarefas é chamar WaitAny (taskArray, timeout) até que eu não tenha mais tarefas para iniciar, então chame WaitAll sem tempo limite até que a última tarefa seja feita.

Poderia WaitAny com um tempo limite causar um cancelamento? Por que minha continuação não foi chamada?

Este é apenas o meu segundo pincel com a biblioteca de tarefas, por isso estou sem noção.

ATUALIZAR:

Eu encontrei esta pergunta SO: Como propagar o status Cancelado de uma tarefa para uma tarefa de continuação. Um erro no meu código acima (mas não a causa do cancelamento) é que eu assumi que o status das tarefas de continuação era o mesmo que o status da tarefa original. Na verdade, você tem que fazer algum trabalho para obter um do outro, como descreve o outro post.

ATUALIZAÇÃO 2:

Brian: Obrigado pela referência do documentaion. Eu pesquisei alto e baixo por causas alternativas de uma tarefa sendo cancelada, mas perdi estas palavras:

"Se você estiver esperando em uma tarefa que transita para o estado Cancelado, uma tarefa (contida em uma AggregateException) é fabricada e lançada. Observe que essa exceção indica cancelamento bem-sucedido em vez de uma situação com falha. Portanto, a propriedade de exceção da tarefa retorna null. "

questionAnswers(1)

yourAnswerToTheQuestion