awaitAll在我的测试中不起作用

时间:2012-11-11 12:55:40

标签: scala actor future

当我创建 ad-hoc future 并调用它时,它可以正常工作。

scala> val f = future {Thread.sleep(1000 * 60 * 1); println("Hi"); 20}
f: scala.actors.Future[Int] = 

scala> f()
Hi
res39: Int = 20

当我创建相同的 future 并调用awaitAll时,它不起作用。 awaitAll返回None,好像未来未解决。

scala> val f = future {Thread.sleep(1000 * 60 * 1); println("Hi"); 20}
f: scala.actors.Future[Int] = 

scala> awaitAll(1000 * 60 * 2, f)
Hi
res40: List[Option[Any]] = List(None)

2 个答案:

答案 0 :(得分:1)

首选future超过Future,不推荐使用。

如何:“将Future中的未来的scala.concurrent推荐到Future中过去的scala.actors,不推荐使用。”

像往常一样,希瑟米勒说得最好;见评论。

object Test extends App {
  import scala.concurrent._
  import Await._
  import Future._
  import duration._
  import ExecutionContext.Implicits.global

  val data = List(1,2,3)
  result(traverse(data)(i => future{10 * i}), Duration("10 sec")) foreach println
}

答案 1 :(得分:1)

我希望能帮助你。

import scala.actors._

object StackOverFlow13331294 extends App {
    Futures awaitAll (1000 * 60 * 1,
            Seq(new StackOverFlow13331294 !! "execute"): _*) foreach println
}

class StackOverFlow13331294 extends Actor {
    start
    override def act = react {
        case "execute" =>
            // Thread sleep 1000 * 60 * 1 ?
            println("Hi")
            reply("20")
    }
}