Tutorial Async/Await: Streams Assíncronas no ASP.NET Core
Cancelamento de Tarefas em C#: Exemplo e Boas Práticas
O cancelamento de tarefas em C# é um recurso fundamental para promover segurança, escalabilidade📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. e boa manutenção do código em cenários assíncronos. Para lidar com processos que podem não precisar finalizar completamente (seja para economizar recursos ou responder rapidamente a eventos externos), contamos com o CancellationToken
🎯 CancellationToken: Cancele Operações Demoradas!Descubra como aplicar CancellationToken no C# para abortar operações com eficiência, evitando travas de UI e otimizando o uso de recursos das aplicações.. Neste tutorial, exploraremos como ele funciona, por que é importante e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. mostraremos exemplos reais de uso.
Entendendo o Propósito do Cancelamento de Tarefas🔗
- Em operações assíncronas
Repositório Assíncrono: Como Estruturar o Acesso a DadosDescubra como implementar um repositório assíncrono em C# seguindo boas práticas de separação de responsabilidades e eficiência de dados. de maior duração (como downloads, processamento de dados ou chamadas externas), pode surgir a necessidade de interromper a tarefa
🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. em execução caso ela não seja mais necessária.
- Cancelar tarefas previne consumo excessivo de recursos e melhora a experiência
🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!Aprenda a otimizar seu perfil LinkedIn com dicas essenciais para devs .NET. Conquiste oportunidades e destaque suas habilidades! do usuário, pois não ficamos aguardando algo que já não tem mais relevância.
Conhecendo o CancellationToken e o CancellationTokenSource🔗
- CancellationToken
🎯 CancellationToken: Cancele Operações Demoradas!Descubra como aplicar CancellationToken no C# para abortar operações com eficiência, evitando travas de UI e otimizando o uso de recursos das aplicações.: é uma estrutura (struct
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara.) em .NET que sinaliza quando uma operação deve ser cancelada. Ele não possui lógica para disparar o cancelamento por si só; apenas representa o estado de cancelado ou não cancelado.
- CancellationTokenSource
🎯 CancellationToken: Cancele Operações Demoradas!Descubra como aplicar CancellationToken no C# para abortar operações com eficiência, evitando travas de UI e otimizando o uso de recursos das aplicações. (CTS): responsável por criar
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. e controlar o sinal de cancelamento. A partir do
CancellationTokenSource
, obtemos o🎯 CancellationToken: Cancele Operações Demoradas!Descubra como aplicar CancellationToken no C# para abortar operações com eficiência, evitando travas de UI e otimizando o uso de recursos das aplicações.
CancellationToken
que será passado às tarefas🎯 CancellationToken: Cancele Operações Demoradas!Descubra como aplicar CancellationToken no C# para abortar operações com eficiência, evitando travas de UI e otimizando o uso de recursos das aplicações.
Diferenças entre Threads, Tasks e Delegates em C#Aprenda as diferenças entre Threads, Tasks e Delegates em C#. Este tutorial prático ensina como otimizar a execução paralela e melhorar o desempenho. que podem ser canceladas.
Exemplo de uso para criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. um token e associá-lo a um método
🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência.:
var cts = new CancellationTokenSource();
CancellationToken token = cts.Token;
// Método que aceita um token
await ProcessoLongoAsync(token);
// Quando quisermos cancelar a operação:
cts.Cancel();
Cancelando de Forma Segura e Observando o Token🔗
Para um código assíncronoRefatorando Código Síncrono para Assíncrono: Guia Passo a PassoDescubra como transformar código síncrono em assíncrono em C# com práticas detalhadas, garantindo performance e escalabilidade em suas aplicações. responder ao cancelamento, normalmente verificamos se o token foi acionado em pelo menos um desses pontos:
Usar o método🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência.
ThrowIfCancellationRequested()
. Quando📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. o token é cancelado, essa chamada lança uma
OperationCanceledException
.
2. Checagem manual com IsCancellationRequested
Verifica-se a propriedade⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção.
IsCancellationRequested
, e se for🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais!
true
, encerra a tarefa🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. de forma graciosa (por exemplo, retornando imediatamente):
private async Task ProcessoLongoAsync(CancellationToken token)
{
// Exemplo de loop que faz parte de um processo maior
for (int i = 0; i < 100; i++)
{
// Verifica se foi solicitado cancelamento
if (token.IsCancellationRequested)
{
Console.WriteLine("Cancelamento detectado. Encerrando operação...");
return; // encerra o método de forma segura
}
// Simula uma operação assíncrona demorada
await Task.Delay(100, token);
}
Console.WriteLine("Processo finalizado sem cancelamento.");
}
Dica: Em muitos métodos do .NET que aceitamCancellationToken
(comoTask.Delay
ou operações de E/S), o cancelamento também gerará uma exceção OperationCanceledException imediatamente.
Cancelamento em Fluxos de Trabalho e Boas Práticas🔗
1. Entregar o token
Sempre que possível, repasse o mesmo token para métodos🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência. internos que possam ser cancelados de forma coerente. Exemplo:
public async Task ExecutarProcessoCompleto(CancellationToken ct)
{
await Etapa1Async(ct);
await Etapa2Async(ct);
await Etapa3Async(ct);
}
Dessa forma, qualquer etapa consegue responder ao cancelamento em tempo hábil.
2. Tratar exceções💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código. de cancelamento
Geralmente, capturamos OperationCanceledException para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! reconhecermos que o fluxo foi interrompido por escolha do chamador, sem tratar isso como erro. Exemplo:
try
{
await ProcessoLongoAsync(cts.Token);
}
catch (OperationCanceledException)
{
Console.WriteLine("Operação cancelada de forma controlada.");
}
3. Registrar ações de limpeza
Podemos usar o método🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!Otimize seu código em C# com métodos inteligentes. Aprenda práticas de reutilização, sobrecarga e escopo para melhorar a clareza e a eficiência.
Register
do CancellationToken
para executar ações de limpeza assim que o cancelamento for requisitado. Isso é útil para liberar recursos🎯 CancellationToken: Cancele Operações Demoradas!Descubra como aplicar CancellationToken no C# para abortar operações com eficiência, evitando travas de UI e otimizando o uso de recursos das aplicações.
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. ou fechar conexões imediatamente:
var cts = new CancellationTokenSource();
// Registra uma ação que será executada quando o cancelamento for solicitado
cts.Token.Register(() => Console.WriteLine("Cancelamento solicitado! Limpando recursos..."));
// Agora qualquer tarefa que esteja usando cts.Token
// será notificada do cancelamento e executará a ação registrada
Cenários Comuns de Cancelamento🔗
- Cancelamento pelo Usuário: Em aplicações desktop ou web, o usuário clica em um botão para interromper a tarefa
🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. em andamento.
- Timeout
Timeout e Retries: Estratégias de Resiliência com Async/AwaitAprenda a usar Timeout e Retries com async/await em C# para garantir operações assíncronas robustas e melhorar a resiliência da sua aplicação.: O
CancellationTokenSource
pode ser configurado para expirar automaticamente após um período. A tarefa será cancelada ao atingir esse tempo limite🎯 CancellationToken: Cancele Operações Demoradas!Descubra como aplicar CancellationToken no C# para abortar operações com eficiência, evitando travas de UI e otimizando o uso de recursos das aplicações.
Timeout e Retries: Estratégias de Resiliência com Async/AwaitAprenda a usar Timeout e Retries com async/await em C# para garantir operações assíncronas robustas e melhorar a resiliência da sua aplicação.:
using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10));
await ProcessoLongoAsync(cts.Token);
// Após 10 segundos, cts será cancelado automaticamente
- Cancelamento em Cadeia: Várias tarefas
Diferenças entre Threads, Tasks e Delegates em C#Aprenda as diferenças entre Threads, Tasks e Delegates em C#. Este tutorial prático ensina como otimizar a execução paralela e melhorar o desempenho. encadeadas compartilham o mesmo token, de modo que uma única chamada de
Cancel()
interrompe todo o fluxo.
Resumo🔗
- CancellationToken
🎯 CancellationToken: Cancele Operações Demoradas!Descubra como aplicar CancellationToken no C# para abortar operações com eficiência, evitando travas de UI e otimizando o uso de recursos das aplicações. é fundamental para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! cancelar tarefas
Diferenças entre Threads, Tasks e Delegates em C#Aprenda as diferenças entre Threads, Tasks e Delegates em C#. Este tutorial prático ensina como otimizar a execução paralela e melhorar o desempenho. de forma segura e evitar o desperdício de recursos
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos..
- Use
CancellationTokenSource
para criar🎯 CancellationToken: Cancele Operações Demoradas!Descubra como aplicar CancellationToken no C# para abortar operações com eficiência, evitando travas de UI e otimizando o uso de recursos das aplicações.
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. e disparar o sinal de cancelamento.
- Verifique o token regularmente (por
IsCancellationRequested
ouThrowIfCancellationRequested
) ou use APIs🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. que aceitam diretamente o
CancellationToken
.🎯 CancellationToken: Cancele Operações Demoradas!Descubra como aplicar CancellationToken no C# para abortar operações com eficiência, evitando travas de UI e otimizando o uso de recursos das aplicações.
- Ao capturar a exceção
💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!Descubra como tratar exceções em C# com práticas eficientes utilizando try/catch. Aprenda a gerenciar erros e aumentar a robustez do seu código.
OperationCanceledException
, reconheça que a operação foi encerrada intencionalmente. - Aproveite as funcionalidades oferecidas: registro de ações de limpeza (
Register
) e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. definição de timeouts
Timeout e Retries: Estratégias de Resiliência com Async/AwaitAprenda a usar Timeout e Retries com async/await em C# para garantir operações assíncronas robustas e melhorar a resiliência da sua aplicação..
A adoção do cancelamento de forma sistemática torna o sistema mais responsivo, eficiente e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. confiável, deixando claro qual é o comportamento esperado quando não for mais necessário prosseguir com uma operação assíncrona
⚡ Async/Await: Programação Assíncrona sem Callbacks!Aprenda a aplicar Async/Await em C# para criar aplicações responsivas, evitar travamentos e melhorar a escalabilidade com exemplos práticos e dicas essenciais..
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Documentação oficial do .NET sobre programação assíncrona, que abrange conceitos e práticas essenciais para a implementação de CancellationToken em operações assíncronas: learn.microsoft.com/pt-br/dotnet/csharp/programming-guide/concepts/async