Scala Actors: есть ли встроенный способ остановить / прервать актера? - PullRequest
2 голосов
/ 14 ноября 2011

В Java у меня есть хобби с потоком, например:

Thread thread = new Thread() {

  @Override
  public void run() {
    //use this while loop, I can stop/ interrupt the thread when I want
    while (!isInterrupted()) {
      //...
    }
  }
};
thread.start();

и затем, когда я хочу остановить / прервать мой поток:

thread.interrupt();

Итак, мой вопрос: есть ли встроенный способ (поле / метод / функция ...) в Scala, который я могу остановить / прервать актера?

Это мой опыт: я новичок в Scala, я действительно учусь кодировать. И я нахожу свой лучший путь между актером и нитью. С моей точки зрения, мне нравится новый подход - актер.

P.S .: Извините за мой английский ...

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Как указано в другом ответе, модель субъекта специально разработана для ограничения всего взаимодействия с субъектом передачей и обработкой сообщений.Scala / Akka выполняет это, заставляя вас создать актера, вызвав метод actorOf.Поскольку у вас нет ссылки на базовый объект, вы не можете напрямую вызывать методы для него.

Так что, если вы хотите иметь Actor, который может быть прерван, просто обработайте некоторое сообщение, которое делает это.

def receive = {
  case 'Interrupt => // handle interruption...
}

и в коде вашего клиента

a ! 'Interrupt
0 голосов
/ 14 ноября 2011

Вы можете отправить Актеру PoisonPill, чтобы попросить его прекратить (см. http://akka.io/docs/akka/1.2/intro/getting-started-first-scala.html)

Обратите внимание, что это работает с Актерами akka. Не знаю для актеров scala.

...