2017-11-20 7 views
0

Gibt es eine Möglichkeit, den Status von Fehlern in Compleable Futures zu verfolgen?Überblick über den Erfolg von Completable Futures

Ich habe ein Szenario, wo ich drei Futures habe, wo die put() entweder erfolgreich sein oder eine RunTime Exception werfen kann; und ich möchte nur, dass zwei erfolgreich sind. Mit anderen Worten, wenn der erste und der zweite Put erfolgreich sind, möchte ich den dritten abbrechen und möchte nicht, dass diese Zukunft abgeschlossen wird. Wenn jedoch der erste fehlschlägt, möchte ich mit den anderen beiden fortfahren.

Wie behalte ich den Überblick über Ausnahmen in einem CompletableFuture und wie kann ich eine Zukunft in einer Reihe von Futures kündigen basierend auf der Anzahl der Erfolge?

final CompletableFuture<Try<Void>> a = CompletableFuture.supplyAsync(() -> put());               
final CompletableFuture<Try<Void>> b = CompletableFuture.supplyAsync(() -> put()); 
final CompletableFuture<Try<Void>> c = CompletableFuture.supplyAsync(() -> put()); 
    CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(a,b,c); 
    combinedFuture.get(); 
+0

möglicherweise 1) Rückruf oder 2) Umfrage –

+0

Können Sie das ein wenig mehr beschreiben? Leider – Gary

+0

, aber ich bin kein Profi in dieser Ecke von Java, so dass ich eine detaillierte Antwort auf diejenigen verlassen, die sind. –

Antwort

0

Ich denke, ein Phaser hier nützlich sein wird:

Phaser phaser = new Phaser(2); 

final CompletableFuture<Void> a = 
    CompletableFuture.supplyAsync(() -> { put(); phaser.arrive(); return null; }); 
final CompletableFuture<Void> b = 
    CompletableFuture.supplyAsync(() -> { put(); phaser.arrive(); return null; }); 
final CompletableFuture<Void> c = 
    CompletableFuture.supplyAsync(() -> { put(); phaser.arrive(); return null; }); 

CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(a,b,c); 

phaser.awaitAdvanceInterruptibly(0); 

new Phaser(2) bedeutet, dass der Phaser für zwei arrive() Anrufe warten wird sich vor Markierung „beendet“, die alle Methoden verursacht Fortschritt zurückzukehren warten.

Verwandte Themen