ドキュメントからこれを間違えたと思います。
XMLActor と HttpActor の 2 つのアクターがあります。XMLActor は xmlFiles を読み取り、メッセージを HTTPActor に送信して処理します。XMLActor は HttpActor よりもずっと早く終了します。
メイン クラスの呼び出しは、両方のアクターに参加します。両方のアクターが終了した後にのみメイン スレッドが終了することを期待していました。しかし、実際に起こっていることは、すべてのメッセージが XMLActor によって処理されるとすぐにシステムが終了し、多くのメッセージが HttpActor によって処理されないということです。
ラッチや AtomicInteger を使用して、すべてのメッセージが消費されるのを待つこともできますが、もっとエレガントな方法があるかどうか疑問に思っていました。
final HttpActor httpActor = new HttpActor().start()
final XMLActor xmlActor = new XMLActor(httpActor:httpActor).start()
Actors.actor {
file.eachLine { line ->
def chunks = line.split(",")
def id = chunks[0].replaceAll("\\\"","").trim()
def name = chunks[1].replaceAll("\\\"","").trim()
xmlActor << new FileToRead(basePath:args[1],id:id,name:name, fileCounter:counter)
}
}
[httpActor, xmlActor]*.join()
//inside xmlActor
countries.each { country ->
httpActor << new AlbumPriceMessage(id:message.id, country:country)
}