

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 대몬(daemon) 작업
<a name="daemontasks"></a>

Java AWS Flow Framework 용를 사용하면 특정 작업을 로 표시할 수 있습니다`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` 대몬(daemon)을 표시할 수 있습니다.

```
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` 내에서 시작된 대몬(daemon) 작업은 해당 작업이 생성된 컨텍스트로 범위가 지정됩니다. 즉`doTry()`, `doCatch()` 또는 `doFinally()` 메서드로 범위가 지정됩니다. 예를 들면 다음 예시에서 startMonitoring 비동기식 메서드는 대몬(daemon)으로 표시되고 `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();
    }
```