Li que a documentação diz que definir o status como Cancelado requer três condições:
OperationCanceledException
(ou seu tipo de exceção derivado, comoTaskCanceledException
) é lançadotoken.IsCancellationRequested
é verdadetoken
no delegado passado paraOperationCanceledException
é idêntico aotoken
passado como parâmetro na criação da tarefa
No entanto, o exemplo a seguir lança diretamente sem nenhum token, mas obtém sucesso no cancelamento. É porque o token é uma estrutura, então o valor padrão sempre satisfaz as duas últimas condições? Não estou confiante sobre esse pensamento, espero obter alguma explicação se eu estiver errado
var task = Task.Run(() =>
{
throw new OperationCanceledException();
});
try
{
task.Wait();
}
catch (AggregateException)
{
Console.WriteLine(task.Status); // Cancelled
}