Scala 为什么这个Akka Streams应用程序会异常退出?
我正在通过Packt的Akka食谱模块学习Akka Streams。我运行该示例并得到以下结果: 为了在流处理完成时让actor系统退出,我添加了以下回调:Scala 为什么这个Akka Streams应用程序会异常退出?,scala,akka,future,akka-stream,Scala,Akka,Future,Akka Stream,我正在通过Packt的Akka食谱模块学习Akka Streams。我运行该示例并得到以下结果: 为了在流处理完成时让actor系统退出,我添加了以下回调: // Future[IOResult] val future = stream.run() future.onComplete(_ => system.terminate()) 但这次应用程序直接退出,没有任何控制台输出: 我想出的一个解决办法是添加线程。睡眠(10000): 我想对这种行为进行解释。以下是您正在处理的流: 由
// Future[IOResult]
val future = stream.run()
future.onComplete(_ => system.terminate())
但这次应用程序直接退出,没有任何控制台输出:
我想出的一个解决办法是添加线程。睡眠(10000)
:
我想对这种行为进行解释。以下是您正在处理的流: 由于使用了
to
连接器,因此在上述流上调用run()
将返回源的具体化值,在本例中,该值是未来[IOResult]
。发生的情况是,在流元素到达接收器之前终止actor系统
使用toMat
和Keep.right
更改流以生成接收器的物化值,而不是添加线程.sleep
。该物化值也是一个未来
,一旦该未来
完成,您可以终止actor系统:
val stream = FileIO.fromPath(path)
...
.toMat(Sink.foreach(println))(Keep.right)
val future = stream.run()
future.onComplete(_ => system.terminate())
请注意,有一种称为runWith
的速记方法:
val stream = FileIO.fromPath(path)
...
.runWith(Sink.foreach(println))
stream.onComplete(_ => system.terminate())
以下是您正在处理的流: 由于使用了
to
连接器,因此在上述流上调用run()
将返回源的具体化值,在本例中,该值是未来[IOResult]
。发生的情况是,在流元素到达接收器之前终止actor系统
使用toMat
和Keep.right
更改流以生成接收器的物化值,而不是添加线程.sleep
。该物化值也是一个未来
,一旦该未来
完成,您可以终止actor系统:
val stream = FileIO.fromPath(path)
...
.toMat(Sink.foreach(println))(Keep.right)
val future = stream.run()
future.onComplete(_ => system.terminate())
请注意,有一种称为runWith
的速记方法:
val stream = FileIO.fromPath(path)
...
.runWith(Sink.foreach(println))
stream.onComplete(_ => system.terminate())