

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Daemon-Aufgaben
<a name="daemontasks"></a>

Das AWS Flow Framework für Java ermöglicht das Markieren bestimmter Aufgaben als`daemon`. Mithilfe dieser Markierung können Sie Aufgaben zum Ausführen von Hintergrundroutinen erstellen, die abgebrochen werden sollen, wenn alle Routinen beendet sind. Eine Aufgabe zum Überwachen des Status soll beispielsweise abgebrochen werden, wenn der Rest des Workflows abgeschlossen ist. Legen Sie dazu das `daemon`-Flag für eine asynchrone Methode oder Instance von `TryCatchFinally` fest. Im folgenden Beispiel wird die asynchrone Methode `monitorHealth()` als `daemon` markiert.

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

Im obigen Beispiel wird bei Abschluss von `doUsefulWorkActivity` `monitoringHealth` automatisch abgebrochen. Dadurch wird der gesamte Ausführungszweig, der aus dieser asynchronen Methode stammt, abgebrochen. Die Semantik dieses Abbruchs entspricht der in `TryCatchFinally`. Entsprechend können Sie einen `TryCatchFinally`-Daemon markieren, indem Sie ein boolesches Flag an den Konstruktor übergeben.

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

Eine Daemon-Aufgabe, die innerhalb einer gestartet wird, `TryCatchFinally` ist auf den Kontext beschränkt, in dem sie erstellt wurde, d. h. sie wird entweder auf die Methoden, oder beschränkt. `doTry()` `doCatch()` `doFinally()` Im folgenden Beispiel wird die asynchrone startMonitoring-Methode als Daemon markiert und von `doTry()` aufgerufen. Die dafür erstellte Aufgabe wird abgebrochen, sobald die anderen Aufgaben (`doUsefulWorkActivity` in diesem Fall), die in `doTry()` gestartet wurden, abgeschlossen sind.

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