

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Tâches démon
<a name="daemontasks"></a>

Le AWS Flow Framework for Java permet de marquer certaines tâches comme`daemon`. Cela permet de créer des tâches pour effectuer du travail en arrière-plan qui doit être annulé lorsque tout le reste du travail est terminé. Par exemple, une tâche de vérification de l'état doit être annulée lorsque le reste du flux de travail est terminé. Vous pouvez accomplir cela en définissant le drapeau `daemon` sur une méthode asynchrone ou une instance `TryCatchFinally`. Dans l'exemple suivant, la méthode asynchrone `monitorHealth()` est marquée en tant que `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();
  }
}
```

Dans l'exemple ci-dessus, lorsque `doUsefulWorkActivity` se termine, la méthode `monitoringHealth` est automatiquement annulée. Cela entraîne l'annulation de la branche d'exécution entière issue de cette méthode asynchrone. Les sémantiques de l'annulation sont les mêmes que dans `TryCatchFinally`. De même, vous pouvez marquer un démon `TryCatchFinally` en passant un drapeau booléen au constructeur.

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

Une tâche daemon démarrée dans un `TryCatchFinally` est limitée au contexte dans lequel elle a été créée, c'est-à-dire qu'elle sera limitée aux méthodes, ou. `doTry()` `doCatch()` `doFinally()` Par exemple, dans l'exemple suivant, la méthode asynchrone startMonitoring est marquée en tant que démon et appelée à partir de `doTry()`. La tâche ainsi créée est annulée dès que les autres tâches (`doUsefulWorkActivity` dans ce cas) lancées dans `doTry()` sont terminées.

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