作为流 toMat
akka stream toMat
我想了解 toMat 在 akka 流中的作用。例如:
val sink1:Sink[Int, Future[Int]]=Sink.fold[Int,Int](0)(_ + _)
val flow=Flow[Int].fold[Int](0){(x,y)=> x+y}
val runnable = Source (1 to 10).viaMat(flow)(Keep.right).toMat(sink1)(Keep.both)
- viaMat 和 via 有什么用?
- toMat 在 viaMat 和 toMat 之间做什么?
- keep.both 的用途是什么,这是否意味着我可以从以前和当前的价值中具体化,如果是,那么我如何才能取回这些价值。
谢谢
阿伦
via只是viaMat(...)(Keep.left)的一个快捷方式,实际上是这样实现的:override def via[T, Mat2](flow: Graph[FlowShape[Out, T], Mat2]): Repr[T] = viaMat(flow)(Keep.left)
toMat 与 viaMat 相同,但对于接收器,它允许您保留左侧 (source/flow) 或右侧 (接收器) 或两者的物化值
Keep.both 只是 (a:A,b:B) => (a, b)
的别名,它是一个将两个输入参数和 return 作为元组的函数。它用于在组合两个流(或源和流或流和汇等)时具有左侧和右侧的物化值
我将剖析你的代码行:
// you're keeping the materialized value of flow
val source2 = Source (1 to 10).viaMat(flow)(Keep.right)
// you're keeping both materialized values, i.e. the one of flow from previous step
// and the one o sink.
val runnableGraph = source2.toMat(sink)(Keep.both)
runnableGraph.run() // returns a tuple (flowMatVal, sinkMatVal)
当您连接流的两个部分(即源和 flow/sink 或流和汇)时,每个部分都有一个物化值,您在 运行 流时获得该值。与 via/to 组合时的默认行为是保留左侧。如果您使用 viaMat/toMat,您可以选择将正确的具体化值或两者都保留为一个元组。
我可以从 akka 用户组获得一些细节
https://groups.google.com/forum/#!topic/akka-user/Ofnx_XzWrTU
我想了解 toMat 在 akka 流中的作用。例如:
val sink1:Sink[Int, Future[Int]]=Sink.fold[Int,Int](0)(_ + _)
val flow=Flow[Int].fold[Int](0){(x,y)=> x+y}
val runnable = Source (1 to 10).viaMat(flow)(Keep.right).toMat(sink1)(Keep.both)
- viaMat 和 via 有什么用?
- toMat 在 viaMat 和 toMat 之间做什么?
- keep.both 的用途是什么,这是否意味着我可以从以前和当前的价值中具体化,如果是,那么我如何才能取回这些价值。
谢谢 阿伦
via只是viaMat(...)(Keep.left)的一个快捷方式,实际上是这样实现的:
override def via[T, Mat2](flow: Graph[FlowShape[Out, T], Mat2]): Repr[T] = viaMat(flow)(Keep.left)
toMat 与 viaMat 相同,但对于接收器,它允许您保留左侧 (source/flow) 或右侧 (接收器) 或两者的物化值
Keep.both 只是
(a:A,b:B) => (a, b)
的别名,它是一个将两个输入参数和 return 作为元组的函数。它用于在组合两个流(或源和流或流和汇等)时具有左侧和右侧的物化值
我将剖析你的代码行:
// you're keeping the materialized value of flow
val source2 = Source (1 to 10).viaMat(flow)(Keep.right)
// you're keeping both materialized values, i.e. the one of flow from previous step
// and the one o sink.
val runnableGraph = source2.toMat(sink)(Keep.both)
runnableGraph.run() // returns a tuple (flowMatVal, sinkMatVal)
当您连接流的两个部分(即源和 flow/sink 或流和汇)时,每个部分都有一个物化值,您在 运行 流时获得该值。与 via/to 组合时的默认行为是保留左侧。如果您使用 viaMat/toMat,您可以选择将正确的具体化值或两者都保留为一个元组。
我可以从 akka 用户组获得一些细节
https://groups.google.com/forum/#!topic/akka-user/Ofnx_XzWrTU