Scala 如何正确终止包含循环的图形?

Scala 如何正确终止包含循环的图形?,scala,akka,akka-stream,Scala,Akka,Akka Stream,我有一个SinkShape图形,里面有一个循环: source.take(10) ~> merge ~> process ~> split ~> out merge.preferred <~ split 现在我尝试获取这个Future的值,但是从未调用onComplete回调。正如我添加的.take(10)语句一样,图中的原始源应该正确终止 我也尝试过删除循环,而未来是按预期生成的一个合并阶段(以及合并首选)

我有一个
SinkShape
图形,里面有一个循环:

source.take(10) ~> merge ~> process ~> split ~> out
                   merge.preferred  <~ split        
现在我尝试获取这个
Future
的值,但是从未调用
onComplete
回调。正如我添加的
.take(10)
语句一样,图中的原始源应该正确终止


我也尝试过删除循环,而
未来
是按预期生成的

一个
合并
阶段(以及
合并首选
)可以急切地完成,也可以不完成。 换句话说,您可以告诉您的阶段在其任何输入完成或所有输入完成时完成

在您的情况下,您需要急切地完成,因为2个输入中的一个(即标记为首选的输入)由于环回而永远不会完成

Merge
stage在布尔标志中公开完成行为,该标志默认为false(有关详细信息,请参阅)。试着把它改成真的

val merge = b.add(MergePreferred(secondaryPorts = 2, eagerComplete = true))
val merge = b.add(MergePreferred(secondaryPorts = 2, eagerComplete = true))