Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 为什么这个Akka Streams应用程序会异常退出?_Scala_Akka_Future_Akka Stream - Fatal编程技术网

Scala 为什么这个Akka Streams应用程序会异常退出?

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): 我想对这种行为进行解释。以下是您正在处理的流: 由

我正在通过Packt的Akka食谱模块学习Akka Streams。我运行该示例并得到以下结果:

为了在流处理完成时让actor系统退出,我添加了以下回调:

// 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())