7
當我等待斯卡拉未來的結果,它的行爲更像收到,或像反應,即它如果有阻塞線程,或計劃的延續結果後?在Scala Future塊線程上等待嗎?
當我等待斯卡拉未來的結果,它的行爲更像收到,或像反應,即它如果有阻塞線程,或計劃的延續結果後?在Scala Future塊線程上等待嗎?
是的,在stdlib中它阻塞了線程,並同步等待結果。如果你想將持續傳球風格應用於期貨,你必須使用Akka或斯卡拉斯,以便在期貨結算中直接添加鉤子。
Akka:
與 Scalazval f1 = Future { Thread.sleep(1000); "Hello" + "World" }
val f2 = f1 map { _.length }
f2 foreach println //Done asynchronously and non-blocking
一樣:
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]
它應該阻止當前線程,但工作線程是否被阻塞,取決於。