

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Flussi di lavoro continui
<a name="continuous"></a>

In alcuni casi d'uso, può servire un flusso di lavoro di durata lunga o eterna, ad esempio uno che monitori l'integrità di una flotta di server. 

**Nota**  
Poiché Amazon SWF conserva l'intera cronologia dell'esecuzione di un flusso di lavoro, la cronologia continuerà a crescere nel tempo. Il framework recupera la cronologia da Amazon SWF quando esegue una riproduzione; questo può diventare costoso se le dimensioni della cronologia sono troppo grandi. Nei flussi di lavoro di lunga durata o continui, devi chiudere periodicamente l'esecuzione in corso e avviarne una nuova per poter proseguire. 

 Questo è un proseguimento logico dell'esecuzione del flusso di lavoro. A questo scopo si può usare un self client generato. Nell'implementazione del flusso di lavoro, basta chiamare il metodo `@Execute` sul self client. Una volta completata l'esecuzione corrente, il framework avvia una nuova esecuzione utilizzando lo stesso ID del flusso di lavoro.

Puoi anche proseguire l'esecuzione chiamando il metodo `continueAsNewOnCompletion` nel `GenericWorkflowClient` che puoi recuperare dal `DecisionContext` corrente. Ad esempio, la seguente implementazione del flusso di lavoro imposta un timer perché si attivi dopo un giorno e chiama il suo punto di ingresso per avviare una nuova esecuzione. 

```
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 un flusso di lavoro si chiama ricorsivamente, il framework chiude il flusso di lavoro in corso al completamento dei task in sospeso e avvia una nuova esecuzione. Ricorda che fino a quando ci sono task in sospeso, l'esecuzione corrente non può essere chiusa. La nuova esecuzione non eredita automaticamente la cronologia o i dati da quella originale; se vuoi esportare qualche stato sulla nuova esecuzione, dovrai trasferirlo esplicitamente come input.