我想在scala中開始使用akka。在主要的Scala線程中,我想創建一個AKK演員,向它發送一條消息,並阻止該演員終止。做這個的最好方式是什麼?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()
}
}
}
}
並且它經由調用:剛剛超過5000毫秒來執行,而不是
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
即塊取我希望是幾ms,所以它似乎與默認的未來超時有關 - 並且程序實際上並未終止。我真正想要做的就是發送x條消息的時間。這裏發生了什麼?
您沒有回覆任何第一條DoIncr郵件(您發送的是「inc !! DoIncr」。 – 2011-05-16 07:17:49
謝謝 - 如果您有一連串的郵件,顯然該鏈中的第一個演員無法回覆主線程解鎖它,直到鏈中的最後一個actor被處理完爲止,在akka中做到這一點的最好的習慣方法是什麼?最好是鏈中的最後一個actor能夠以某種方式發信號通知主線程,而不是傳遞所有的信息鏈接到第一個參與者 – user747980 2011-05-16 07:42:55
爲什麼你想阻止主線程? – 2011-05-16 09:05:36