

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 持續的工作流程
<a name="continuous"></a>

在某些使用案例中，您可能會需要一直執行或長期執行的工作流程，例如，監控伺服器群運作狀態的工作流程。

**注意**  
由於 Amazon SWF 會保留工作流程執行的完整歷史記錄，因此歷史記錄會隨著時間持續成長。當框架執行重新執行時，會從 Amazon SWF 擷取此歷史記錄，如果歷史記錄大小太大，就會變得很昂貴。在這種長期執行或持續的工作流程中，您應該定期關閉目前的執行並開始新的執行，以繼續處理。

 這是邏輯性持續工作流程執行。產生的自主用戶端可用於此目的。在您的工作流程實作中，只要在自主用戶端上呼叫 `@Execute` 方法即可。一旦完成目前的執行，框架即會使用相同的工作流程 ID 開始新的執行。

您也可以在可從目前的 `DecisionContext` 擷取的 `GenericWorkflowClient` 上呼叫 `continueAsNewOnCompletion` 方法來繼續執行。例如，以下工作流程實作會設定計時器在一天後觸發，呼叫它自己的進入點開始新的執行。

```
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();
    }
}
```

當工作流程遞迴呼叫自己時，框架會在所有等待中的任務已完成並開始新的工作流程執行時，關閉目前的工作流程。請注意，只要有等待中的任務，就不會關閉目前的工作流程執行。新的執行不會自動繼承原始執行的任何歷史記錄或資料，如果您想要將一些狀態傳遞給新的執行，您必須將它明確傳送為輸入。