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
LaAWS Flow Frameworkper Java permette di contrassegnare alcune attività comedaemon
. 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'attività demone iniziata all'interno di unTryCatchFinally
è inquadrata al contesto in cui è stato creato, ovvero verrà assegnato a uno dei duedoTry()
,doCatch()
, oppuredoFinally()
Metodi. 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(); }