私はscalaでakkaを始めようとしています。メインの scala スレッドで、akka アクターを開始し、それに 1 つのメッセージを送信して、そのアクターが終了するまでブロックしたいと思います。これを行う最善の方法は何ですか?
たとえば、自分自身に繰り返しメッセージを送信するテスト アクターがあります。
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 数のメッセージを送信するパフォーマンスの時間を測定することだけです。何が起きてる?