我正在尝试在scala中开始使用akka。在主 scala 线程中,我想启动一个 akka 演员,向它发送一条消息,然后阻塞直到该演员终止。做这个的最好方式是什么?
例如,我有一个测试参与者,它只是反复向自己发送消息:
class Incrementer() extends Actor {
val maxMessages = 5
var counter = 0
def receive() = {
case DoIncr() => {
if (counter < maxMessages) {
counter += 1
self ! DoIncr()
} else {
self.stop()
}
}
}
}
它通过以下方式调用:
val inc = actorOf(new Incrementer()).start()
val result = inc !! DoIncr()
println(result) // this should block this thread, but it doesn't seem to.
// do other stuff
该块的执行时间刚刚超过 5,000 毫秒,而不是我预期的几毫秒,因此它似乎与默认的未来超时有关 - 并且程序实际上并没有终止。我真正想做的只是计算发送 x 条消息的性能。这里发生了什么?