

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# デーモンタスク
<a name="daemontasks"></a>

 AWS Flow Framework for 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();
    }
```