将来在context.become之前终止

时间:2015-09-22 13:11:55

标签: akka

考虑以下代码段描述的情况

class MyActor extends Actor {
    def receive = {
        case msg: String =>
            val f: Future[Long] = <some future>
            f pipeTo self
            context.become(afterFuture)
    }

    def afterFuture: Receive = {
        case futureResult: Long =>
            // process the future result
    }
}

因此,我们有一个开始执行未来的演员,将结果传递给自己。然后它会改变它的行为,以便能够处理未来的结果。 是否有可能在调用context.become生效之前终止,因此演员无法处理未来的结果?

我的猜测是,它不是因为当前消息(msg:String)的处理只会在context.become生效后终止,此时邮箱中的下一条消息将被处理并且新的行为已经到位。尽管如此,我还是希望得到其他人的肯定,这些人肯定比我更了解。

1 个答案:

答案 0 :(得分:1)

不,您在处理下一条消息之前将完成对context.become的呼叫。在那种情况下没有竞争条件。