如何在不干扰正常终止行为的情况下将scala actor添加到现有程序?

Eld*_*rum 6 scala termination exit actor

执行main()后,该程序不会退出.

object Main
{
    def main(args: Array[String]) {
        ... // existing code
        f()
        ... // existing code
    }
    def f() {
        import scala.actors.Actor._
        val a = actor {
            loop {
                react {
                case msg: String => System.out.println(msg)
                }
            }
        }
        a ! "hello world"
    }
}
Run Code Online (Sandbox Code Playgroud)

由于这种意想不到的副作用,使用演员可以被视为侵入性.

假设演员必须继续运行直到程序终止,您将如何在所有终止案例中保留原始行为?

Eri*_*cht 7

在2.8中有一个允许这样的DaemonActor类.在2.7.x我可以破解自定义调度程序,即使仍有实时演员也不会阻止关闭,或者如果你想要一个简单的方法,你可以在main结束时调用System.exit().

如果你认为一个演员是一种轻量级线程,那么大多数时候你想要一个现场演员来防止程序终止.否则,如果你有一个程序在actor中完成它的所有工作,你需要在主线程上有一些东西只是让它保持活着直到所有演员完成.