应用 context.become 之前终止未来

Future terminating before context.become is applied

考虑以下片段描述的情况

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
    }
}

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

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

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