2011-04-13 6 views
7

Cuando esperar para resultado de Scala futuro, se comporta más como reciben, o como reaccionan, es decir, no se bloquee un hilo, o una continuación después de los horarios resultado si está disponible?¿Espera a que Scala Future bloquee el hilo?

Respuesta

15

Sí, en stdlib bloquea el hilo y espera resultados sincrónicamente. Si desea aplicar el estilo de continuación de paso a futuros, debería usar Akka o Scalaz que permiten agregar ganchos en la finalización de futuros directamente desde la caja.

Akka:

val f1 = Future { Thread.sleep(1000); "Hello" + "World" } 

val f2 = f1 map { _.length } 

f2 foreach println //Done asynchronously and non-blocking 

mismo con Scalaz:

scala> val f1 = promise {Thread.sleep(1000); "Hello" + "World"} 
f1: scalaz.concurrent.Promise[java.lang.String] = [email protected] 

scala> val f2 = f1 map{str => str.length} 
f2: scalaz.concurrent.Promise[Int] = [email protected] 

scala> f2.map(println) 
10 
res5: scalaz.concurrent.Promise[Unit] = [email protected] 
1

Debe bloquear el hilo actual, pero si el hilo de trabajo está bloqueado, depende.

Cuestiones relacionadas