次のコードがあります。
class App1 extends App {
val system = ActorSystem()
val actor1 = system.actorOf(Props[Actor1])
implicit val timeout = Timeout(5 seconds) //1
val future = actor1 ? "start"
val result = Await.result(future, timeout.duration).asInstanceOf[String]
if (result == "string1") println("yes123)
else println("no456")
}
class Actor1 extends Actor {
actor2 = context.actorOf(Props[Actor2])
def receive = {
case "start" => {
implicit val timeout = Timeout(10 seconds) // 2
val future = actor2 ? "command1" // 3
val result = Await.result(future, timeout.duration).asInstanceOf[String]
sender ! result // 4
}
}
}
class Actor2 extends Actor {
def receive = {
case "command1" => {
// .... some calculations
sender ! "result123" //5
}
}
}
これは私が持っている正確なコードではなく、単純なバージョンです。質問は次のとおりです。
最初のタイムアウトは 2 番目のタイムアウトに依存しますか? もしそうなら、最初のものは2番目のものよりも小さいか、等しいか、または大きい必要がありますか?
//1 and //2
Actor1
からの結果を待つActor2
必要があります。正確に未来を使用する必要がありますか?!
の代わりに使用でき?
ますか?// 3 and //4
私はすべてが大丈夫であることを確認するだけです。値を送信者が想定するとおりに (を使用して)送信者
//4
に//5
返しますか?!
これは私が実際に持っているものの非常に単純なバージョンであり、ドキュメントでこれらの特定の質問に対する答えが見つからなかったため、自分でテストできないことに注意してください。