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!📡 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!🎯 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!📊 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🔗

Conhecendo o CancellationToken e o CancellationTokenSource🔗

Exemplo de uso para criar📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 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!🧠 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 PassoRefatorando 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:

1. Por meio de exceção💥 Try/Catch: Domine Exceções antes que Elas Dominem Você!💥 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.

Usar o método🧠 Métodos em C#: Como Criar Funções que Não São Só Enfeites!🧠 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!📊 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)!⚡ 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!)🔄 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!🤝 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 aceitam CancellationToken (como Task.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!🧠 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ê!💥 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!)🔄 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!🧠 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🎯 CancellationToken: Cancele Operações Demoradas!🎯 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. para executar ações de limpeza assim que o cancelamento for requisitado. Isso é útil para liberar recursos📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!📡 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🔗

using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(10));
await ProcessoLongoAsync(cts.Token);
// Após 10 segundos, cts será cancelado automaticamente

Resumo🔗

A adoção do cancelamento de forma sistemática torna o sistema mais responsivo, eficiente e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 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!⚡ 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🔗

Compartilhar artigo

Artigos Relacionados