J'ai une même question comme celle-ci RxJava Subject with Backpressure - only let the last value emit once downstream has finished consuming mais à la place je veux tous les éléments qui ont émis (liste de tous les éléments tamponnés) tandis que l'aval est occupé dans la consommationRxJava Sujet avec Backpressure - laisser toute la liste à émettre une fois en aval consommé
public static void main(String[] args) throws Exception {
Subject<Boolean> loadingQueue =
PublishSubject.<Boolean>create().toSerialized();
loadingQueue
.toFlowable(BackpressureStrategy.BUFFER)
.delay(0, TimeUnit.MILLISECONDS, Schedulers.single()) // <-------
.map(discarded -> {
// PRE-LOADING
System.out.println("PRE-LOADING: "
+ Thread.currentThread().getName());
return discarded;
})
.delay(0, TimeUnit.MILLISECONDS, Schedulers.computation()) // <-------
.map(b -> {
System.out.println("LOADING: "
+ Thread.currentThread().getName());
Thread.sleep(2000);
return b;
})
.delay(0, TimeUnit.MILLISECONDS, Schedulers.single()) // <-------
.rebatchRequests(1) // <----------------------------------- one-by-one
.subscribe(b -> {
System.out.println("FINISHED: "
+ Thread.currentThread().getName() + "\n\n");
});
loadingQueue.onNext(true);
loadingQueue.onNext(true);
loadingQueue.onNext(true);
Thread.sleep(10000);
}
fonctionner, mais au lieu d'obtenir un objet, un par un, je veux la liste de tous l'élément tampon à la fois et tout occupé en aval, je veux créer une autre liste et ainsi de suite
Je suis désolé, cela nécessite un opérateur personnalisé non trivial. – akarnokd
@akarnokd que pensez-vous que la solution ci-dessous est bien ou d'autres cas doivent gérer ?? –
Je ne suis pas sûr si vous obtiendrez le même modèle PRE-CHARGEMENT et FINI, mais si cela fonctionne pour vous, alors allez-y. De même, évitez les postages croisés - cela n'a probablement aucun avantage car je vais également répondre à la liste des problèmes de RxJava. – akarnokd