

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Task Daemon
<a name="daemontasks"></a>

Il AWS Flow Framework for Java consente di contrassegnare determinate attività come`daemon`. Questa funzionalità ti permette di creare task che effettuano un lavoro di background che deve essere annullato quando tutti gli altri lavori sono stati eseguiti. Ad esempio, un task di monitoraggio dello stato deve essere annullato quando il resto del flusso di lavoro è completato. Puoi farlo impostando il contrassegno `daemon` su un metodo asincrono o un'istanza di `TryCatchFinally`. Nell'esempio seguente, il metodo asincrono `monitorHealth()` è contrassegnato come `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();
  }
}
```

Nell'esempio riportato sopra, quando `doUsefulWorkActivity` viene completato, `monitoringHealth` viene automaticamente annullato. Questa operazione annulla l'intero ramo di esecuzione radicato nel metodo asincrono. La semantica dell'annullamento è identica a quella di `TryCatchFinally`. Analogamente, puoi contrassegnare un daemon `TryCatchFinally` passando un contrassegno Boolean al costruttore.

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

Un'operazione daemon avviata all'interno di a `TryCatchFinally` è limitata al contesto in cui è stata creata, ovvero sarà limitata ai metodi, o. `doTry()` `doCatch()` `doFinally()` Nel seguente esempio il metodo asincrono startMonitoring viene contrassegnato come daemon e chiamato da `doTry()`. Il task creato verrà annullato non appena gli altri task (`doUsefulWorkActivity` in questo caso) avviati entro `doTry()` saranno completati.

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