应该是一个简单的问题.我正在使用Akka 2.4.2(包含Akka Streams和HTTP).我希望这个Source完成&程序终止,因为它Source是有限的,但它永远不会.为什么这个程序不会终止?
import scala.concurrent._
import scala.collection.immutable._
import akka._
import akka.actor._
import akka.stream._
import akka.stream.scaladsl._
import akka.util._
object Test extends App {
implicit val system = ActorSystem("TestSystem")
implicit val materializer = ActorMaterializer()
val s = Source.single(1)
s.runForeach(println)
}
Run Code Online (Sandbox Code Playgroud)
输出:
$ sbt run
...
[info] Running Test
[DEBUG] [02/23/2016 10:59:19.904] [run-main-0] [EventStream(akka://TestSystem)] logger log1-Logging$DefaultLogger started
[DEBUG] [02/23/2016 10:59:19.904] [run-main-0] [EventStream(akka://TestSystem)] Default Loggers started
1
Run Code Online (Sandbox Code Playgroud)
我build.sbt文件的相关部分:
scalaVersion := "2.11.7"
scalacOptions := Seq("-unchecked", "-deprecation", "-encoding", "utf8")
libraryDependencies ++= {
val akkaVersion = "2.4.2"
Seq(
"com.typesafe.akka" %% "akka-stream" % akkaVersion
)
}
Run Code Online (Sandbox Code Playgroud)
Kon*_*ski 15
因为Akka使用非守护程序线程,所以它会保持应用程序运行,直到你关闭它ActorSystem.这是因为典型的用例是在main方法中启动系统,然后所有计算都发生在ActorSystem管理的main()线程上(即线程完成并离开 - 如果线程是daemonic应用程序将关闭,这不是我们通常想要的).
你可以这样做:
import system.dispatcher
s.runForeach(println).onComplete { _ => system.terminate() }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1722 次 |
| 最近记录: |