J'ai un malentendu à propos de the contract de thenCompose(Function<? super T,? extends CompletionStage<U>> fn)
. Voici ce qui est dit là:CompletableFuture, thenCompose méthode
Renvoie une nouvelle
CompletionStage
que, lorsque cette étape complète normalement, est exécuté avec ce stade que l'argument de la fonction fournie.
Il semble que la fonction accepte le résultat de cette CompletionStage
, pas le CompletionStage
lui-même. Alors qu'est-ce qu'ils veulent dire par là?
Et qu'en est-il de la tâche représentée par le CompletableFuture
retourné?
Runnable r;
ExecutorService es;
Function<Void, CompletableFuture<Void>>f;
//...
CompletableFuture.runAsync(r, es)
.thenCompose(f);
Est-ce que cela signifie, une tâche, représenter par CompletableFuture
retourné par thenCompose
seront exécutés dans le même ThreadPool
que le Runnable r
?
Le document est mal rédigé - il devrait indiquer "* avec le résultat de cette étape comme argument de la fonction fournie *". 'f' sera exécuté en utilisant' es'. – assylias
Le chemin, le 'CompletableFuture' sera terminé, a déjà été défini par la fonction' f' * avant * il le retourne. – Holger
@Holger Que voulez-vous dire? D'abord, nous appelons 'runAsync' qui soumet' Runnable' à 'ThreadPool'. Il peut arriver que le futur soit complété ** avant que ** thenCompose ne soit appelé (l'évaluation des arguments de 'thenCompose' peut prendre un certain temps). –