[英]Scala Actor not working as expected
我正在尝试让一名演员上班,但它只能部分起作用。
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)
这有什么问题吗?
每个仅receive
一次的呼叫都会收到一条消息。 因为您在致电接收之前就给自己发送了一条消息,所以您永远不会减小该循环中的邮箱大小。
您应该创建一个单独的线程来发送心跳,或者使用receiveWithin
和TIMEOUT
情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.