Scala Actor не работает должным образом - PullRequest
1 голос
/ 17 ноября 2010

Я пытаюсь заставить актера работать, но он работает только частично.

MyActor работает каждую секунду и запускает задание, вызывая себя в цикле.

Эта часть отлично работает.

Я также хотел бы вызывать 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 Ответ

3 голосов
/ 17 ноября 2010

Каждый вызов receive получает только одно сообщение.Поскольку вы отправляете себе одно сообщение непосредственно перед вызовом получения, вы никогда не уменьшите размер почтового ящика в этом цикле.

Вы должны создать отдельный поток для отправки пульса или использовать регистр receiveWithin и TIMEOUT.

...