¿Hay secuencial Future.find?
Tengo alguna función de efecto secundario,
def f(): Future[Int] = {
val n = Random.nextInt()
println(s"Generated $n")
Future(n)
}
y quiero ejecutarlo repetidamente hasta que el predicado regrese verdadero.
def success(n: Int): Boolean = n % 2 == 0
Mi plan es construirStream
de resultados
val s = Stream.fill(10)(f)
y luego usarFuture.find
para obtener el primer resultado que satisfaga el predicado.
Future.find(s)(success) map println
El problema es eseFuture.find
ejecuta todos los futuros en paralelo y quiero que ejecute futuros secuencialmente uno tras otro hasta que el predicado regrese verdadero.
scala> Future.find(s)(success) map println
Generated -237492703
Generated -935476293
Generated -1155819556
Generated -375506595
Generated -912504491
Generated -1307379057
Generated -1522265611
Generated 1163971151
Generated -516152076
res8: scala.concurrent.Future[Unit] = scala.concurrent.impl.Promise$DefaultPromise@37d28f02
Some(-1155819556)
La pregunta es cómo ejecutar secuencia de futuros secuencialmente hasta que el predicado regrese verdadero. ¿Hay alguna función adecuada en la biblioteca estándar o de terceros?