2017-07-31 7 views
0

Dire que j'ai une situation comme ci-dessous:Si j'utilise thenCompose sur un CompletableFuture et que je l'assigne, ai-je 2 CompletableFutures?

CompletableFuture<Object1> f1 = Class1.doSomething(); 
CompletableFuture<Object2> f2 = Class2.doSomethingElse(f1); 
boolean b = doAnotherThing(f2); 

Où Classe2 utilise thenCompose() et revient avec un type d'objet différent

CompletableFuture<Object2> doSomethingElse(CompletableFuture<Object1> f) { 
return f.thenCompose(s -> {...}); 

Est-ce que je puis 2 à terme? Dois-je faire:

CompletableFuture.allOf(f1, f2); 

Comment l'affectation affecte-t-elle le futur?

+0

D'où vient le c2? – efekctive

+0

@efekctive désolé, je l'ai abrégé, juste pour Class2. – Tim

Répondre

0

Selon docs java, thenCompose:

Description du copié de l'interface: CompletionStage Retourne une nouvelle CompletionStage que, lorsque cette étape se termine normalement, est exécuté avec ce stade que l'argument de la fonction fournie. Voir la documentation CompletionStage pour les règles couvrant l'achèvement exceptionnel .

Il retourne une nouvelle CompletableFuture

http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html#thenCompose-java.util.function.Function-

1

Vous avez deux contrats à terme distincts pouvant être complétée. f1 sera complété avec le résultat Object1 de doSomething. f2 sera complété avec le résultat Object2 de la fonction anonyme dans doSomethingElse. Cependant, puisque f2 dépend des résultats de f1, il suffit d'attendre f2 pour savoir que les deux tâches sont terminées.