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