TheCodeNaked

Paralelismo - Episódio 7 (Copy)

Episódio 7 - Controle total: cancelamento e limpeza de tarefas assíncronas no Delphi

Quem nunca clicou em um botão de "Cancelar" e o programa ignorou solenemente o comando?

Pois é. O cancelamento de uma thread no Delphi sempre foi uma dor de cabeça, especialmente quando usamos TTask.Runou TThread cru. O problema não é apenas parar a execução: é parar com graça, limpando os recursos usados e garantindo que a UI volte ao normal.

Neste episódio, vamos mostrar como a TSafeThreadInterface e o TTaskChain lidam com cancelamento de forma segura, responsiva e previsível.


O desafio do cancelamento

Imagine que você esteja atualizando milhares de registros. O usuário se arrepende e clica em "Cancelar". O que você espera?

  1. Que a tarefa realmente pare
  2. Que os componentes visuais sejam reativados
  3. Que os recursos sejam liberados
  4. Que nenhuma exceção apareça do nada

Agora tente fazer isso com TThread cru.

🧩 Boa sorte.


Como a TSafeThreadInterface resolve isso

A classe já vem com suporte embutido a cancelamento:

  • Params.RequestCancel; permite solicitar o cancelamento
  • Dentro da lógica de execução, você verifica Params.CancelRequested
  • Se estiver True, basta sair do processamento
  • O callback OnCancel será chamado automaticamente na UI Thread, permitindo restaurar a interface com segurança

Exemplo:

if Params.CancelRequested then
  Exit;

E o TTaskChain?

Cada tarefa encadeada também respeita o cancelamento:

  • Você pode usar Params.RequestCancel dentro de qualquer tarefa
  • Se isso acontecer, o TTaskChain interrompe a execução da cadeia
  • O progresso e os callbacks finais são chamados mesmo em caso de cancelamento

Além disso, o ciclo de vida se encerra automaticamente sem memory leak nem exceções silenciosas.


Dicas práticas:

  • Sempre verifique CancelRequested dentro de laços longos
  • Libere recursos no OnTerminate ou OnCancel
  • Evite ShowMessage em callbacks de cancelamento (são bloqueantes)
  • Prefira Memo.Lines.Add ou componentes visuais não intrusivos

Resultado final:

  • Cancelamento imediato
  • Sem travamentos
  • Interface restaurada
  • Usuário feliz

E o melhor:

Sem Sleep(10) no meio do código como solução mágica.

No próximo episódio, vamos ver como tudo isso se encaixa num modelo declarativo configurado via JSON.

Threads podem ser seguras. E canceláveis.

Basta projetá-las com respeito ao que mais importa: o ciclo de vida completo.
Sobre o autor

TheCodeNaked

No TheCodeNaked, programar é consequência, não ponto de partida. Antes do código, vem a dúvida, a análise, o contexto. Não seguimos fórmulas — questionamos. Criar software é pensar com clareza. O resto é só digitação.

TheCodeNaked

Criar com clareza. Codificar com intenção.

TheCodeNaked

Ótimo! Você se inscreveu com sucesso.

Bem-vindo de volta! Você acessou com sucesso.

Você se inscreveu com sucesso o TheCodeNaked.

Sucesso! Verifique seu e-mail para acessar com o link mágico.

As suas informações de faturamento foram atualizadas.

Seu pagamento não foi atualizado