我如何使用akka unbecome有什么问题

时间:2013-12-26 16:10:18

标签: scala akka

有一个scala课程(来自课程反应课程)

class Counter extends Actor {
   def counter(n: Int): Receive = {
    case "inc" => context.become(counter(n + 1))        
    case "get" => sender ! n
  }

  def receive = counter(0)
}

所有这个actor都是通过inc请求递增计数器并通过get请求返回当前计数器值。 我认为context.become会为行为堆栈添加新的行为。所以,如果我添加行

    case "dec" => context.unbecome()

它将从堆栈中恢复先前的行为,并且进一步获取请求将返回先前的值。但如果我跑

counter ! "inc"
counter ! "inc"
counter ! "inc"
counter ! "inc"

counter ! "dec"
counter ! "get"

如我所料,返回的结果为0但不是3。有谁可以形容为什么?

1 个答案:

答案 0 :(得分:9)

您对become的调用会丢弃先前的行为,因为第二个参数discardOld的默认值为true。此默认行为旨在避免内存泄漏。