我要發送的郵件列表,以一個演員,立即收到回覆在未來,然後等待所有期貨返回到調用方法之前完成。從閱讀阿卡文檔,我相信Future.sequence是要走的路,但我一直沒能得到下面的代碼才能正常工作。我得到這個錯誤從編譯器:使用阿卡期貨和演員的並行列表
found : akka.dispatch.ActorCompletableFuture
required: akka.dispatch.Future[Integer]
Error occurred in an application involving default arguments.
futures += secondary ? GetRandom
^
我敢肯定,我失去了一些東西很明顯,但下面的代碼似乎是每個實例和API文檔「正確的」。
import java.util.Random
import akka.dispatch.Future
import akka.actor._
import Commands._
import collection.mutable.ListBuffer
object Commands {
trait Command
case class GetRandom() extends Command
case class GenRandomList() extends Command
}
class Secondary() extends Actor {
val randomGenerator = new Random()
override def receive = {
case GetRandom() =>
self reply randomGenerator.nextInt(100)
}
}
class Primary() extends Actor {
private val secondary = Actor.actorOf[Secondary]
override def receive = {
case GenRandomList() =>
val futures = new ListBuffer[Future[Integer]]
for (i <- 0 until 10) {
futures += secondary ? GetRandom
}
val futureWithList = Future.sequence(futures)
futureWithList.map { foo =>
println("Shouldn't foo be an integer now? " + foo)
}.get
}
override def preStart() = {
secondary.start()
}
}
class Starter extends App {
println("Starting")
var master = Actor.actorOf(new Primary()).start()
master ! GenRandomList()
}
什麼是發送一系列的消息給一個演員的正確方法,收到的未來,並返回一旦所有的期貨已經完成(可以存儲從每個將來的結果列表並返回它)。
哪個版本阿卡您使用的是:D與搭配呢? –
阿卡1.2使用Scala 2.9.1。 –