Episódio 27 - Quando a Ação Gera Outra Ação: o Princípio da Reatividade
Em muitos sistemas, especialmente aqueles que envolvem interação com o usuário ou comunicação com APIs, a execução de uma tarefa frequentemente gera a necessidade de executar outra. Um evento leva a outro, como uma fileira de dominós cuidadosamente posicionados. Este comportamento define o que chamamos de reatividade.
⌚ O problema
Imagine que você baixa um JSON. A estrutura dele exige que, a cada 10 registros, você baixe uma imagem diferente. Mas essas imagens devem ser baixadas após o JSON ser validado. E, depois que a imagem é baixada, é necessário atualizar o banco local.
Tudo isso, claro, mantendo a interface fluida, responsiva e sem travar.
Em um código tradicional, isso facilmente vira um inferno de if, TTask.Run, Synchronize e try...except aninhados. É a receita ideal para bugs difíceis de rastrear e comportamentos imprevisíveis.
✅ A solução com TSafeThread e TTaskChain
O TTaskChain brilha aqui, pois permite que uma tarefa chame outra naturalmente. Cada etapa tem seu espaço, cada exceção é tratada, e o ciclo de vida está controlado.
TaskChain := TTaskChain.Create(True);
TaskChain.AddTask('Download JSON',
procedure(...)
begin
// Baixa JSON e chama OnTaskSuccess ou OnTaskError
end);
TaskChain.AddTask('Baixar Imagens do JSON',
procedure(...)
begin
// Para cada 10 registros do JSON, baixa uma imagem
end);
TaskChain.AddTask('Atualizar Banco de Dados',
procedure(...)
begin
// Insere ou atualiza registros
end);
TaskChain.Start;
E se houver dependências?
Sem problemas. Cada Task pode armazenar seu resultado em uma variável intermediária compartilhada (ou injetada). O segredo é que cada ação pode passar o bastão para a próxima com clareza.
E o cancelamento?
Todas as etapas respeitam CancelRequested, ou seja, se o usuário quiser parar a cadeia, isso é feito com segurança.
Por que isso é importante?
Porque reatividade estruturada é uma necessidade real no desenvolvimento moderno. O mundo é assíncrono, e o seu código precisa refletir isso com elegância, não com gambiarras.
Com TSafeThread e TTaskChain, você cria aplicações que pensam em cadeia, mas sem aprisionar você em um código encadeado.
No próximo episódio, vamos explorar como reutilizar sequências de tarefas como se fossem componentes, criando pipelines de execução que você pode plugar e reutilizar.
Reatividade é o primeiro passo. Modularidade é o próximo.