Привет Я использую scala (2.8.1) для реализации трудоемкого обработчика задач с использованием актора, однако я не могу очистить его при запуске своих модульных тестов, поэтому мои модульные тесты зависали навсегда.
как я вызываю метод:
val configs = new ProjectsConfig("XXXXXXXXXXXXX")
try {
configs.start
configs.init//time consuming stuff
} finally {
configs.destory
configs.stop
}
Я планирую сохранить ссылку на акторов и выполнить выход из вызова при каждом включении, фрагмент кода выглядит следующим образом:
однако, похоже, это не работает. как очистить всех актеров в этом случае?
class ProjectsConfig(val url: String) extends Actor {
private var actors: List[Actor] = List()
private object Stop
def init = {
val caller = this;
for (projectConfig <- list) {
val myActor: Actor = actor {
caller ! projectConfig.instantiate
}
actors = actors ::: List(myActor)
}
}
def act() {
while (true) {
receive {
case project: Project =>
Projects.update(project)
case Stop => exit()
}
}
}
def destory {
for (actor <- actors) {
try {
actor ! exit
} catch {
case e => System.out.println(e.printStackTrace)
}
}
}
def stop() {
this ! Stop
}