1
resposta

Divergência entre video e resposta

"https://cursos.alura.com.br/course/certificacao-csharp-multithreading/task/52651

Incorreto. O método Cancel() apenas solicita o cancelamento de uma tarefa, mas não efetua o cancelamento em si.

ct.ThrowIfCancellationRequested(); Correto. O método ThrowIfCancellationRequested gera um OperationCanceledException se esse token tiver o cancelamento solicitado. Ele cancela a tarefa e ao mesmo tempo marca o status como TaskStatus.Canceled."

O video anterior foi muito claro (por volta 6º min) em dizer que o método Cancel é o responsável pelo cancelamento e que o método ThrowIfCancellationRequested lança a exceção, mas o que vemos nas respostas é o oposto.

1 resposta

Oi Alysson, tudo bem?

No vídeo isso pode não ter ficado tão claro, mas o exercício está correto. O método Cancel() apenas cancela o token (e não a tarefa), ou seja, muda o status do token, enquanto o método ThrowIfCancellationRequested() aborta a execução e de fato cancela a tarefa, e não o token. A gente pode pensar no token como um "objeto compartilhado", um "ticket" ou "notificação", ou simplesmente um veículo de comunicação entre o código externo e o código da tarefa. A tarefa, por outro lado, tem a responsabilidade de verificar esse "ticket" ou "token", que foi cancelado externamente (a verificação é feita através da propriedade boolean token.IsCancellationRequested).