Wyścig futures / sukcesów
Uczę się przyszłości i próbuję stworzyć metodę, która przyjmuje dwie przyszłości jako parametr (f
ig
) i zwróć pierwszą przyszłość, która została pomyślnie ukończona, w przeciwnym razie powrócif
lubg
.
Niektóre przypadki użycia ilustrujące zachowanie mojej metody to:
Future 1 | Future 2 | Result
Success First Success Second Future 1
Success First Failure Second Future 1
Success Second Success First Future 2
Success Second Failure First Future 1
Failure First Failure Second Future 2 (because we had a failure on Future 1, so try to see what is the result Future 2)
Więc stworzyłem tę metodę:
def successRace(f: Future[T], g: Future[T]): Future[T] = {
val p1 = Promise[T]()
val p2 = Promise[T]()
val p3 = Promise[T]()
p1.completeWith(f)
p2.completeWith(g)
p3. ????
p3.future
}
A teraz, skąd mam wiedzieć, który z nich został ukończony pierwszy?