Scala Actor没有按预期工作

时间:2010-11-17 16:21:34

标签: scala actor

我想让一个演员工作,但它只能部分工作。

MyActor每秒开始工作,并通过循环调用自己来运行Job。

这部分工作正常。

我还想从应用程序的其他部分随机调用MyActor。

这不起作用。

MyActor会增加其mailboxSize但继续循环,并且永远不会提取从外部发送的任何消息。

case class DoJob(fast:Boolean)

object MyActor extends Actor {

  def act = {
    loop {
      MyActor ! DoJob(false)
      receive {
        case DoJob(fast) => {
          Job.perform(fast)
        }
      }
      Thread.sleep(1000)
    }
  }
}

以下在调用DoJob(true)方面不起作用,只是增加了MyActor的邮箱大小:

MyActor ! DoJob(true)

这里可能有什么问题?

1 个答案:

答案 0 :(得分:3)

每次拨打receive只会收到一条消息。由于您在呼叫接收之前就发送了一条消息,因此永远不会减少该循环中的邮箱大小。

您应该创建一个单独的线程来发送心跳,或使用receiveWithinTIMEOUT案例。