TheCodeNaked

Paralelismo - Episódio 24 (Copy)

Episódio 24 — Persistência de Estado: Continuar de onde parou (mesmo depois do reboot)

Imagine um cenário real:

  • Seu aplicativo inicia uma sequência de tarefas
  • O usuário fecha o app ou o sistema reinicia por atualização
  • Ao abrir de novo, ele precisa recomeçar tudo?

A resposta mais comum: sim.

Mas e se não precisasse?

✅ Salvando o contexto da execução

Graças à estrutura do TTaskChain e do TSafeThread, é possível serializar parte do contexto de execução em tempo real:

  • Nome da tarefa atual
  • Parâmetros recebidos
  • Resultados parciais (se aplicável)
  • Status: "em execução", "concluída", "erro", "cancelada"

Armazenando essas informações em um arquivo local, banco de dados ou mesmo cache, você pode:

  • Retomar a execução no mesmo ponto
  • Ignorar tarefas já finalizadas com sucesso
  • Reprocessar tarefas com erro ou canceladas

⚠️ O que não salvar:

  • Ponteiros ou objetos não serializáveis
  • Referências diretas a elementos visuais (Image, Label, Memo, etc.)
  • Funções anônimas (closures)

⚖️ Como projetar para isso

  1. Crie uma estrutura simples (record ou class) que represente o estado da execução
  2. Serialize em JSON, INI ou outro formato de sua preferência
  3. No início da execução, verifique se há estado anterior salvo
  4. Decida o ponto de retomada
  5. Continue a partir dali

Exemplo de estrutura de estado:

type
  TTaskChainState = record
    CurrentIndex: Integer;
    TaskStatus: TArray<string>; // 'Pending', 'Success', 'Error', 'Canceled'
    Parameters: TArray<string>;
  end;

Integração com o TTaskChain

Adicione checkpoints entre as tarefas:

SaveStateToFile(TaskIndex, Status);

E no início:

if FileExists(StateFile) then
begin
  LoadState;
  SkipCompletedTasks;
end;

Conclusão

Persistir o estado é uma extensão natural de um modelo de execução assíncrona elegante.

Com isso, seu sistema não só ganha robustez, como também mostra respeito ao tempo e contexto do usuário.

No próximo episódio, vamos mostrar como lidar com retentativas automáticas, incluindo backoff exponencial, detecção de falhas permanentes e tratamento de instabilidade de rede.

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