我正在将一个项目从 scala 演员迁移到 akka 演员。我曾经有过这样的事情,如果某个系统资源不可用,MyActor 的构造函数可能会抛出异常:
var myActor: MyActor = null
try {
myActor = new MyActor(3)
}
catch {
case e: SomeUserDefinedException => println("failed!")
}
使用 akka,我将代码迁移到此:
val someParam = 3
var myActor: ActorRef = null
try {
myActor = context.actorOf(Props(classOf[MyActor], someParam), "myActor")
}
catch {
case e: SomeUserDefinedException => println("failed!")
}
我遇到的问题是,在 akka 案例中,context.actorOf
调用实际上并没有创建 MyActor 对象本身,而是将其推迟到另一个线程。所以当构造函数抛出异常时,我放入的try
/块没有任何作用。catch
如何将此 scala 演员代码迁移到 akka 演员?理想情况下,我宁愿避免增加很多额外的复杂性。