【发布时间】:2013-04-12 07:21:04
【问题描述】:
当未来的演员抛出异常时会发生什么?
根据http://doc.akka.io/docs/akka/snapshot/scala/futures.html 的 Akka 文档:
Actor 或 Dispatcher 是否正在完成任务并不重要 Future,如果捕获到异常,Future 将包含它 的有效结果。如果 Future 确实包含异常,则调用 Await.result 会导致它再次被抛出以便可以处理 正确。
我不确定这是我在运行这段代码时看到的:
class Worker extends Actor {
def receive = {
case i: Int => throw new RuntimeException
}
}
implicit val system = ActorSystem("MySystem")
val worker = system.actorOf(Props(new Worker), name="worker")
implicit val timeout = Timeout(5 minutes)
val future = worker ? 0
val res = Await.result(future, 10 seconds)
根据文档,Await.result 应该再次抛出异常,但我得到的是 TimeoutException!有人可以澄清一下吗?
【问题讨论】:
标签: scala exception exception-handling akka future