0

あるアクターからランダムに選択された別のアクターにメッセージ ("msg" など) を転送しようとしています。

ランダムに選択されたアクターが以前のアクターの 1 つである場合を除き、完全に正常に機能します。そのようなシナリオが発生すると、Scala は無期限に待機します。すでに受信しているかどうかに関係なく、プログラムにメッセージを渡すようにします (つまり、アクター間のメッセージの無限ループ)。

Actor A ---- msg ---> Actor B
Actor B ---- msg ---> Actor C
Actor C ---- msg ---> Actor A

この後、プログラムは終了せず、メッセージを渡し続けません。私が間違っているところを指摘してもらえますか?

class MyActor extends Actor {
def act() {
react{
case str : String =>
// Picking a random actor
val randNo : Int = Random.nextInt(5)
actorArray(randNo) ! str
}
}
}

ありがとう、MS

4

1 に答える 1

4

reactアクターが複数回反応できるようにするには、呼び出しの周りにループを配置する必要があります。

class MyActor extends Actor {
  def act() {
    loop {
      react {
        // ...
      }
    }
  }
}

Scala アクターに関するこの短いチュートリアルを参照してください。

于 2012-09-29T21:24:21.417 に答える