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?

questionAnswers(3)

yourAnswerToTheQuestion