

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Tareas del demonio
<a name="daemontasks"></a>

El AWS Flow Framework para Java permite marcar ciertas tareas como`daemon`. Esto le permite crear tareas que hacen algo de trabajo en segundo plano que deberán cancelarse cuando se realiza el resto del trabajo. Por ejemplo, una tarea de monitorización de estado deberá cancelarse una vez que se haya completado el resto del flujo de trabajo. Puede hacerlo estableciendo el indicador `daemon` en un método asíncrono o una instancia de `TryCatchFinally`. En el siguiente ejemplo, el método asíncrono `monitorHealth()` está marcado como `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();
  }
}
```

En el ejemplo de arriba, cuando se completa `doUsefulWorkActivity`, se cancelará `monitoringHealth` automáticamente. Esto cancelará a su vez la bifurcación de ejecución completa enraizada en este método asíncrono. La semántica de la cancelación es la misma que en `TryCatchFinally`. De manera parecida, puede marcar un demonio `TryCatchFinally` pasando un indicador booleano al constructor.

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

Una tarea de daemon iniciada dentro de `TryCatchFinally` se establece en el contexto en el que se crea, es decir, se establecerá en cualquiera de estos métodos: `doTry()`, `doCatch()` o `doFinally()`. Por ejemplo, en el siguiente ejemplo, el método asíncrono startMonitoring está marcado como demonio y se llama desde `doTry()`. La tarea que se creó para él se cancelará tan pronto como se completen las otras tareas (`doUsefulWorkActivity` en este caso) iniciadas dentro de `doTry()`.

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