繁体   English   中英

Scala Actor无法正常工作

[英]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一次的呼叫都会收到一条消息。 因为您在致电接收之前就给自己发送了一条消息,所以您永远不会减小该循环中的邮箱大小。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM