Wir schreiben einen Code in einer einzigen Blockierungsmethode, der asynchron mehrere, langsame Dienste von Drittanbietern aufruft. Diese asynchronen Aufrufe sind in Code eingebettet, der dieselbe Schnittstellenmethode implementiert. Wir möchten die asynchronen Aufrufe auslösen und warten, bis alle zurückgegeben wurden, bevor wir den Aufruf der Blockierungsmethode zurückgeben.
Ich hoffe, das ist klar!
Gibt es ein geeignetes Designmuster / eine geeignete Bibliothek für die Implementierung? Es muss ein ziemlich übliches Muster sein. Vielen Dank im Voraus.
Sie könnten ein CountDownLatch
verwenden initialisiert mit der Anzahl der Async-Aufrufe und jeder Async-Handler dekrementiert den Latch. Das "äußere" Blockierverfahren würde einfach auf den vollständigen Countdown "warten", z. B .:
Ich bin mir nicht sicher, wie Sie die Dinge machen, aber ich würde alles haben, was die asynchronen Aufgaben startet (am besten mit Executor
) und für jede Aufgabe, die Sie starten, eine Future<?>
zurückgeben. Dann müssten Sie einfach alle Future<?>
s in ein Collection
setzen und durchlaufen, indem Sie get()
aufrufen:
Ich habe die Ausnahmebehandlung für get()
hier weggelassen, aber das ist die allgemeine Idee.
Tags und Links java asynchronous synchronous