问题描述
akka.stream.scaladsl.source.reduce()和runReduce()函数之间有什么区别?
我在这里demo进行了检查,很明显reduce()
使用第一个元素作为“基础”来“折叠”所有元素。我不太了解使用runReduce()
和Source
函数来运行此reduce()
有什么好处。为什么返回Future
?
解决方法
您需要2个步骤来执行akka流:
- 构建蓝图
- 运行它(所谓的实现)
reduce仅执行步骤1,runReduce执行步骤1和2。
import akka.actor.ActorSystem
import akka.stream.scaladsl._
import scala.util.{Failure,Success}
import scala.concurrent.ExecutionContext.Implicits.global
implicit val actorSystem = ActorSystem("example")
// reduce
Source(1 to 10).reduce(_ + _).runForeach(println).onComplete {
case Success(v) => println("done")
case Failure(e) => println(e.getMessage)
}
// it prints:
// 55
// done
// runReduce
Source(1 to 10).runReduce(_ + _).onComplete {
case Success(v) => println(v)
case Failure(e) => println(e.getMessage)
}
// it prints:
// 55
随时在游乐场https://scastie.scala-lang.org/2Iure8pDSUWcLjFVGflyUQ中试用示例