機能的に書くのはそれほど難しくないことに気がついたので、自分の作業の一部をリファクタリングして、コードから変更可能なコレクションを削除することにしました。ロックはただ溶けてしまいます。これで、監視対象のアクターのコレクションを表す Seq ができました。1 つ完了するたびに、シーケンスからそれを削除する必要があります。機能的には、新しい seq を作成し、新しいシーケンスで akka bell を実行すると思います。
def shepherd(categories: Seq[ActorRef]) : Receive = {
case ForumCrawler.Done() => {
val new_categories = categories.filter(a => a != sender)
if(new_categories.size == 0) {
println("all done")
system.shutdown()
}
context.become(shepherd(new_categories))
}
アクター シーケンスが 10k 領域にある場合、これはまだ実行可能なアプローチですか? scala はどういうわけか舞台裏でシーケンスを変更するのでしょうか、それとも完全なセットから set copy を取得するのでしょうか?
これは、 select が当時行っていたような気がしますが、おそらくもっと悪い = D