

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

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

The AWS Flow Framework for Java memungkinkan penandaan tugas-tugas tertentu sebagai`daemon`. Ini memungkinkan Anda membuat tugas yang melakukan beberapa pekerjaan latar belakang yang harus dibatalkan saat semua pekerjaan lain selesai. Sebagai contoh, tugas pemantauan kesehatan harus dibatalkan ketika sisa alur kerja selesai. Anda dapat melakukan ini dengan menetapkan bendera `daemon` pada metode asinkronus atau instans dari `TryCatchFinally`. Pada contoh berikut, metode asinkronus `monitorHealth()` ditandai sebagai `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();
  }
}
```

Dalam contoh di atas, saat `doUsefulWorkActivity` diselesaikan, `monitoringHealth` akan dibatalkan secara otomatis. Hal ini pada gilirannya akan membatalkan seluruh cabang eksekusi berakar pada metode asinkronus ini. Semantik pembatalan sama seperti di `TryCatchFinally`. Demikian pula, Anda dapat menandai daemon `TryCatchFinally` dengan menenruskan bendera Boolean untuk konstruktor.

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

Tugas daemon yang dimulai dalam `TryCatchFinally` dicakupkan ke konteks pembuatannya—yaitu, akan dicakup ke metode `doTry()`, `doCatch()`, atau `doFinally()`. Misalnya, dalam contoh berikut, metode asinkron startMonitoring ditandai daemon dan dipanggil dari `doTry()`. Tugas yang dibuat untuk itu akan dibatalkan segera setelah tugas-tugas lain (`doUsefulWorkActivity` dalam kasus ini) yang dimulai dalam `doTry()` diselesaikan.

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