Warten Sie, bis alle Future.onComplete Callbacks ausgeführt wurden

8

Ich verwende die Future API von Scala 2.10.X.

Hier ist mein Anwendungsfall:

%Vor%

Ziemlich einfach, denke ich: Ich füge einen onComplete Callback zu meiner Zukunft hinzu. Nun, ich frage mich, ob es eine Möglichkeit gibt, einen Callback hinzuzufügen, wenn die Ausführung von onComplete beendet ist - in diesem Beispiel wissen Sie, wann die Protokollierung abgeschlossen ist.

Nehmen wir an, meine result -Instanz hat 3 onComplete registriert, kann ich wissen, wann sie alle ausgeführt wurden? Ich denke nicht, dass es möglich ist, aber wer weiß:)

Vielleicht wäre es eine Alternative, map anstelle von onComplete aufzurufen, um eine neue Instanz von Future zurückzugeben:

%Vor%

Aber ich bin nicht sicher, ob es das gleiche Verhalten behalten würde.

Bearbeiten: Nur um zu verdeutlichen - es gibt nur eine Instanz von Future , und ich rufe onComplete 3 mal auf der selben Instanz auf (Nun, in meinem Beispiel nur einmal, aber nehmen wir an, ich nenne es N-mal) und ich möchte wissen, wann die 3 Rückrufe ausgeführt werden aufgrund der Fertigstellung der gleichen Future Instanz.

    
vptheron 17.01.2014, 14:18
quelle

2 Antworten

12

Wenn Sie keine anderen Methoden (wie CountDownLatch) verwenden möchten, möchten Sie andThen verwenden, um zu wissen, wann Ihre Operationen abgeschlossen wurden (erfolgreich oder nicht und ob die Zukunft erfolgreich war oder nicht).

%Vor%

Wenn die Zukunft fehlschlägt, wird die zugeordnete Funktion nicht aufgerufen:

%Vor%

In ähnlicher Weise unterbricht das Aufblähen in einem verketteten Handler nachfolgende Operationen nicht:

%Vor%

Für den unglücklichen Fall, dass wir darauf warten müssen:

%Vor%     
som-snytt 17.01.2014, 23:47
quelle
5

Mit 1 Zukunft und 3 onComplete

Ich denke, du musst den Weg gehen, entweder deine Funktionen in einen einzigen onComplete -Aufruf zu schreiben oder du musst genau das tun, was du gesagt hast, benutze map :

%Vor%

Folgen Sie dem nächsten Abschnitt, um herauszufinden, wann alle fertig sind.

Mit 3 verschiedenen Futures

Es ist sehr gut zu wissen, wann alle drei Future s fertig sind. In der Tat, in Scala Future komponiert!

%Vor%

Was bedeutet das nun? Es bedeutet, dass fourth ein Future ist, das sich nicht um die Eingaben der drei Argumente kümmert, sondern dass, wenn sie alle vollständig sind, es sich vervollständigen wird. Dies ist bereits fertig verpackt und nur für Sie bereit.

(Randnotiz: In dem Beispiel gehe ich auch davon aus, dass Sie alle implicit im Umfang haben.)

    
wheaties 17.01.2014 14:26
quelle

Tags und Links