Scala 中的 Actors一书提到(未经个人测试):
捕获终止通知。
在某些情况下,接收终止通知作为监控参与者邮箱中的消息很有用。
例如,监控参与者可能想要重新引发某个链接参与者未处理的异常。
或者,监控参与者可能想要对正常终止做出反应,这在默认情况下是不可能的。
Boolean
trapExit
参与者可以配置为使用标志在其邮箱中接收所有终止通知作为正常消息。在以下示例中,actorb
将自身链接到 actor a
:
val a = actor { ... }
val b = actor {
self.trapExit = true
link(a)
...
}
请注意,在 actorb
调用链接之前,它会将其trapExit
成员设置为true
;
这意味着每当链接的参与者终止(正常或异常)时,它都会收到 Exit 类型的消息。
因此,b
每当actor终止时都会通知actor a
(假设actor在调用链接a
之前没有终止)。b
那么“当远程参与者以不那么优雅的方式终止时会发生什么”?即使在异常终止的情况下,
它也应该收到一条消息。Exit
val b = actor {
self.trapExit = true
link(a)
a ! 'start
react {
case Exit(from, reason) if from == a =>
println("Actor 'a' terminated because of " + reason)
}
}