Futuros / Carrera de éxito

Estoy aprendiendo futuros, y estoy tratando de crear un método que tome dos futuros como parámetro (f yg) y devolver el primer futuro que se completó con éxito, de lo contrario, devuelvef og.

Algunos casos de uso para ilustrar el comportamiento de mi método son:

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)

Así que creé este método:

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
}

Y ahora, ¿cómo puedo saber cuál completó primero?

Respuestas a la pregunta(3)

Su respuesta a la pregunta