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!

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay