

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Tarefas de daemon
<a name="daemontasks"></a>

O AWS Flow Framework for Java permite a marcação de determinadas tarefas como`daemon`. Isso permite criar tarefas que realizam algum trabalho de plano de fundo que deve ser cancelado quando todo o outro trabalho for concluído. Por exemplo, uma tarefa de monitoramento da integridade deve ser cancelada quando o restante do fluxo de trabalho for concluído. Você pode realizar isso configurando o sinalizador `daemon` em um método assíncrono ou em uma instância de `TryCatchFinally`. No exemplo a seguir, o método assí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();
  }
}
```

No exemplo acima, quando `doUsefulWorkActivity` é concluído, `monitoringHealth` será cancelado automaticamente. Isso por sua vez cancelará toda a ramificação da execução enraizada nesse método assíncrono. A semântica do cancelamento é igual à do `TryCatchFinally`. De forma semelhante, você pode marcar um daemon `TryCatchFinally` passando um sinalizador booliano para o construtor.

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

Uma tarefa daemon iniciada em um `TryCatchFinally` tem como escopo o contexto em que foi criada, ou seja, ela terá como escopo os métodos `doTry()` `doCatch()` ou `doFinally()`. Por exemplo, no exemplo a seguir, o método assíncrono startMonitoring é marcado como daemon e chamado em `doTry()`. A tarefa criada para ele será cancelada assim que as outras tarefas (`doUsefulWorkActivity` nesse caso) iniciadas em `doTry()` forem concluídas.

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