我創建了一羣執行一些工作然後停止的actor。在其中一些演員中,我調用返回Future
的第三方API。在接收方法內調用Future並在此之後停止actor
MyActor extends Actor
{
....
def receive = {
case MsgA => {
...
//this evaluates to a Future
val p : Future = someFutureAPICall()
//stop the actor
context stop self
}
}
}
現在因爲Future
是無阻塞演員會之後即停止(?),即使Future
尚未完成。這種情況下的預期行爲是什麼?
例如,如果我在Future
上有onComplete
,那麼即使演員已停止,是否仍會執行該操作?
MyActor extends Actor
{
....
def receive = {
case MsgA => {
...
//this evaluates to a Future
val p : Future = someFutureAPICall()
p.onComplete {
//will these expressions ever be evaluated ?
case Success(x) => log.info("Success")
case Failure(f) => log.info("Failure")
}
//stop the actor
context stop self
}
}
}
您應該使用pipeTo模式代替: 'import akka.pattern.pipe p.pipeTo(self)' –