La libreria Guava ha il concetto di ListenableFuture e un SettableFuture .
Un ListenableFuture
ti consente di registrare i callback da eseguire una volta completato il calcolo, o se il il calcolo è già completo, immediatamente. Questa semplice aggiunta consente di supportare in modo efficiente molte operazioni che l'interfaccia di base Future
non supporta.
Poiché l'interfaccia Runnable
non fornisce l'accesso diretto al risultato Future
, gli utenti che desiderano tale accesso potrebbero preferire Futures.addCallback
. Un FutureCallback<V>
implementa due metodi:
-
onSuccess(V)
, l'azione da eseguire se il futuro ha successo, in base al suo risultato
-
onFailure(Throwable)
, l'azione da eseguire se il futuro fallisce, in base all'errore
Il motivo più importante per usare ListenableFuture
è che diventa possibile avere catene complesse di operazioni asincrone.
Quando diverse operazioni dovrebbero iniziare non appena inizia un'altra operazione ("fan-out"), ListenableFuture
funziona correttamente: attiva tutti i callback richiesti. Con un po 'più di lavoro, possiamo "fan-in" o attivare un ListenableFuture per essere calcolati non appena diversi altri futures sono finiti: vedi l'implementazione di Futures.allAsList per un esempio.
In .NET, questi concetti sono implementati usando Task
, TaskCompletionSource
e ContinueWith
.