Sto sperimentando con RxJava e la classe CompletableFuture di Java 8 e non riesco a capire come gestire le condizioni di timeout.Annulla attività su timeout in RxJava
import static net.javacrumbs.futureconverter.java8rx.FutureConverter.toObservable;
// ...
Observable<String> doSomethingSlowly() {
CompletableFuture<PaymentResult> task = CompletableFuture.supplyAsync(() -> {
// this call may be very slow - if it takes too long,
// we want to time out and cancel it.
return processor.slowExternalCall();
});
return toObservable(task);
}
// ...
doSomethingSlowly()
.single()
.timeout(3, TimeUnit.SECONDS, Observable.just("timeout"));
Questo fondamentalmente funziona (se viene raggiunto il timeout di tre secondi, "timeout" è pubblicato). Vorrei tuttavia in aggiunta cancellare il futuro compito che ho inserito in un Observable
- è possibile con un approccio RxJava-centrico?
So che un'opzione potrebbe essere gestire il timeout da solo, utilizzando task.get(3, TimeUnit.SECONDS)
, ma mi chiedo se sia possibile eseguire tutte le operazioni di gestione delle attività in RxJava.
Puoi mostrare come viene implementato il metodo 'toObservable'? –
https://github.com/lukas-krecan/future-converter/tree/master/rxjava-java8 –