私はScalaでakkaアクターを使用しています。私は受け取ったメッセージを処理している間に定期的に他のメッセージのためにそのメールボックスをチェックし、このメッセージに続いてその変数を変更することができるアクターを持つ方法があるかどうかを知りたい。定期的にアクターのメールボックスをチェックし、scalaの変数を変更する方法
のようなスキーム:
class Actor1 (constructors){
def receive={
case "go" => run() //the actor starts
case "alter variables" // a new message is stashed in mailbox
}
def run={
//do stuff
check(mailbox) //while the porocessing of the "go" message
// is not finished
if ("alter variables" in mailbox) {
change a variable value
}
}
}
あなたはなぜそれをしたいのかわかりませんが、Akkaが実施しようとしているデザインパターンが壊れると思いますので、やめてください。あなたは、あなたがメッセージを入れて自分のキューを実装することで似たようなものを作り出すことができるかもしれませんし、キューをチェックする他のメカニズムがあります。 – childofsoong
これはできません。アクターは一度に1つのメッセージ*を処理します。これは、並行環境における安全な変更可能な状態を保証する方法です。 – Ryan