DEV Community

Marcos Lima
Marcos Lima

Posted on • Edited on

CancellationToken em aplicações .NET

O objetivo desse artigo é demonstrar como utilizar o cancellationToken em aplicações .NET através de um exemplo simples e prático.

Mas, a final o que é o CancellationToken? bem, o cancellationToken no C sharp é uma struct, responsável por propagar uma notificação informando que as operações assíncronas devem ser canceladas, ou seja, devem encerrar seus processos e liberar os recursos que estão consumindo na execução de sua tarefa.

Caso de uso
Imagine o seguinte cenário: Você tem uma API que retorna uma lista de itens X para serem renderizados em um sistema, mas a API demora alguns segundos para retornar os dados, pois ela faz algumas consultas no banco de dados e algumas validações. Agora, imagine o usuário utilizando o sistema que consome os dados da sua API e note que está demorando certo tempo para exibir as informações, então o usuário decide recarregar a página algumas vezes, mas e aí? O que vai acontecer com as solicitações que o usuário fez a cada vez que recarregou a página? Bem, é aí que entra a importância de utilizar o cancellationToken.

Imagine que nesse cenário acima não estamos utilizando o cancellationToken, logo, a cada vez que o usuário recarregar a página vai sobrecarregar mais o sistema e consumir mais recursos sem necessidade, pois a aplicação vai tentar processar todas as solicitações, mesmo que o usuário tente cancelar e pedir uma nova (no caso recarregando a página).
Agora fazendo uso do cancellationToken, a cada vez que o usuário recarregar a página vai ser lançado uma TaskCanceledException, e, assim, a operação vai ser encerrada. Com isso, não vamos sobrecarregar o servidor com requisições desnecessárias e liberar os recursos que estavam em uso.

Para um melhor entendimento, vamos ver um exemplo prático. Para isso, desenvolvi uma minimal API em .NET 7 que contém dois endPoints, nos quais um vai conter uma operação com o cancellationToken e o outro sem o cancellationToken.
Para deixar nosso exemplo simples, adicionamos um task.Delay para simular a demora que poderia ser uma integração com algum serviço externo ou uma query que busca informações na base de dados. Também adicionamos alguns logs durante a execução para ficar mais fácil o entendimento.

Segue o vídeo abaixo demostrando o projeto em execução:
https://youtu.be/gb-E1_8Q3e4?si=m54L3ohbSxAh6sHe

Note que, quando fazemos o request sem o cancellationToken, ao recarregar a página a execução continua até o fim, e quando utilizamos o cancellationToken, ao recarregar a página a execução é finalizada e os recursos são liberados.

Chegamos ao fim de mais um artigo, espero que tenha ficado claro a importância de utilizar o CancellationToken em suas aplicações web.

Abraços e até breve!

Top comments (0)