应用 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
的调用将在处理下一条消息之前完成。在那种情况下没有竞争条件。
考虑以下片段描述的情况
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
的调用将在处理下一条消息之前完成。在那种情况下没有竞争条件。