我想让一个演员工作,但它只能部分工作。
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)
这里可能有什么问题?
答案 0 :(得分:3)
每次拨打receive
只会收到一条消息。由于您在呼叫接收之前就发送了一条消息,因此永远不会减少该循环中的邮箱大小。
您应该创建一个单独的线程来发送心跳,或使用receiveWithin
和TIMEOUT
案例。