我有以下代码:
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
}
}
}
这不是我拥有的确切代码,它只是它的一个简单版本。问题如下:
第一个超时是否取决于第二个?如果是这样,第一个必须小于、等于还是大于第二个?
//1 and //2
应该
Actor1
等待来自的结果Actor2
,它应该使用future吗?可以用!
代替?
吗?// 3 and //4
我只是为了确保一切正常。按照他们
//4
的//5
设想(使用!
)将值返回给发件人?
请注意,我无法自己测试它,因为这是我实际拥有的非常简单的版本,而且我没有在文档中找到这些特定问题的答案。