Какова альтернатива onComplete() для возврата первого выполненного будущего в Scala?

#scala #concurrency #parallel-processing

Вопрос:

Учитывая два фьючерса f1 и f2, я пытаюсь вернуть тот, который завершит свое выполнение первым, используя этот метод:

 def first[A](f1: Future[A], f2: Future[A]): Future[A] = ???
 

В качестве примера реализации обещание используется для получения первого будущего, которое завершит свои вычисления, что-то вроде этого:

 def first[A](f1: Future[A], f2: Future[A]): Future[A] =

  val promise = Promise[A]()
  f1.onComplete(result1 => promise.tryComplete(result1))
  f2.onComplete(result2 => promise.tryComplete(result2))

  promise.future
 

Но мне было интересно, есть ли какой-либо другой подход к этой проблеме, который не использует этот onComplete() метод? (например, map() flatMap() вместо этого используйте методы или).

Как будет выглядеть эта реализация?

Вот и все, большое спасибо за помощь! Я новичок в этой теме будущего в Scala, поэтому я немного борюсь с этим. Хорошего дня!

Комментарии:

1. fisrtCompletedOf() ?

2. Как я всегда говорю, Скальдок — твой друг.