Alw*_*ner 3 scala akka akka-stream
run 和 runWith 之间的主要区别是什么:-
import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.{Keep, Sink, Source}
object RunAndRunWith extends App {
implicit val system: ActorSystem = ActorSystem("Run_RunWith")
implicit val materializer: ActorMaterializer = ActorMaterializer()
Source(1 to 10).toMat(Sink.foreach[Int](println))(Keep.right).run()
Source(1 to 10).runWith(Sink.foreach[Int](println))
}
Run Code Online (Sandbox Code Playgroud)
如何知道该使用哪一个?
to(Sink)并用toMat(Sink)接收器终止源并生成一个RunnableGraph,您可以使用它来执行它run(),但它也使您有机会在运行之前为整个图设置流属性,或者将其交给其他将运行它的函数/方法(或除了执行它之外,可能还可以用它做其他事情)。
如果您需要的话,此表单还可以让您控制物化值的来源。
由于想要终止并运行带有接收器的源,而不需要任何附加属性,因此保留接收器的物化值非常常见,因此runWith(Sink)这是一种方便的快捷方式。