

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Fluxos de trabalho contínuos
<a name="continuous"></a>

Em alguns casos de uso, talvez seja necessário um fluxo de trabalho que é executado para sempre ou durante um longo período, por exemplo, um fluxo de trabalho que monitora a integridade de um frota de servidor. 

**nota**  
Como o Amazon SWF mantém todo o histórico da execução de um fluxo de trabalho, o histórico continuará crescendo com o tempo. A estrutura recupera esse histórico do Amazon SWF ao realizar um replay, e isso será caro se o tamanho do histórico for muito grande. Em tais fluxos de trabalho contínuos ou de longa duração, feche periodicamente a execução atual e inicie uma nova para continuar processando. 

 Isso é uma continuação lógica da execução do fluxo de trabalho. O cliente interno gerado pode ser usado para esse propósito. Na implementação do fluxo de trabalho, apenas chame o método `@Execute` no cliente interno. Assim que a execução atual for concluída, a estrutura iniciará uma nova execução usando o mesmo ID de fluxo de trabalho.

Você também pode continuar execução chamando o método `continueAsNewOnCompletion` no `GenericWorkflowClient` que você pode recuperar do `DecisionContext` atual. Por exemplo, a implementação de fluxo de trabalho a seguir define um temporizador após um dia e chama o seu próprio ponto de entrada para iniciar uma nova execução. 

```
public class ContinueAsNewWorkflowImpl implements ContinueAsNewWorkflow {

    private DecisionContextProvider contextProvider
         = new DecisionContextProviderImpl();

    private ContinueAsNewWorkflowSelfClient selfClient
         = new ContinueAsNewWorkflowSelfClientImpl();

    private WorkflowClock clock
         = contextProvider.getDecisionContext().getWorkflowClock();

    @Override
    public void startWorkflow() {
        Promise<Void> timer = clock.createTimer(86400);
        continueAsNew(timer);
    }

    @Asynchronous
    void continueAsNew(Promise<Void> timer) {
        selfClient.startWorkflow();
    }
}
```

Quando um fluxo de trabalho se chama de forma recursiva, a estrutura fechará o fluxo de trabalho atual quando todas as tarefas pendentes forem concluídas e iniciará uma nova execução de fluxo de trabalho. Observe que enquanto houver tarefas pendentes, a execução de fluxo de trabalho atual não fechará. A nova execução não herdará automaticamente nenhum histórico ou dados de execução original. Se desejar carregar algum estado para a nova execução, é necessário enviá-lo explicitamente como entrada.