

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

# 協助程式任務
<a name="daemontasks"></a>

 AWS Flow Framework 適用於 Java 的 允許將特定任務標記為 `daemon`。這可讓您建立執行某些背景工作的任務，這些工作應該在所有其他工作完成時取消。例如，當其餘的工作流程完成時，就應該取消運作狀態監控任務。您可以在同步方法或 `TryCatchFinally` 執行個體上設定 `daemon` 標記，即可完成此作業。在下列範例中，同步方法 `monitorHealth()` 標記為 `daemon`。

```
public class MyWorkflowImpl implements MyWorkflow {
  MyActivitiesClient activitiesClient = new MyActivitiesClientImpl();

  @Override
  public void startMyWF(int a, String b) {
    activitiesClient.doUsefulWorkActivity();
    monitorHealth();
  }

  @Asynchronous(daemon=true)
  void monitorHealth(Promise<?>... waitFor) {
    activitiesClient.monitoringActivity();
  }
}
```

在上例中，當 `doUsefulWorkActivity` 完成時，就會自動取消 `monitoringHealth`。這將會取消以此同步方法為根目錄的整個執行分支。取消的語意和 `TryCatchFinally` 中的一樣。同樣地，您也可以將布林值標記傳遞到建構函數來標記 `TryCatchFinally` 協助程式。

```
public class MyWorkflowImpl implements MyWorkflow {
    MyActivitiesClient activitiesClient = new MyActivitiesClientImpl();

    @Override
    public void startMyWF(int a, String b) {
        activitiesClient.doUsefulWorkActivity();
        new TryFinally(true) {
            @Override
            protected void doTry() throws Throwable {
                activitiesClient.monitoringActivity();
            }

            @Override
            protected void doFinally() throws Throwable {
                // clean up
            }
        };
    }
}
```

在 內啟動的協助程式任務範圍`TryCatchFinally`限定為建立於其中的內容，也就是說，任務範圍限定為 `doTry()`、 `doCatch()`或 `doFinally()`方法。例如，在下列範例中，startMonitoring 同步方法標記為協助程式並從 `doTry()` 呼叫。為它建立的任務會在於 `doTry()` 內啟動的其他任務 (本例中為 `doUsefulWorkActivity`) 完成時立刻取消。

```
public class MyWorkflowImpl implements MyWorkflow {
    MyActivitiesClient activitiesClient = new MyActivitiesClientImpl();

    @Override
    public void startMyWF(int a, String b) {
        new TryFinally() {
            @Override
            protected void doTry() throws Throwable {
                activitiesClient.doUsefulWorkActivity();
                startMonitoring();
            }

            @Override
            protected void doFinally() throws Throwable {
                // Clean up
            }
        };
    }

    @Asynchronous(daemon = true)
    void startMonitoring(){
      activitiesClient.monitoringActivity();
    }
```