akka.stream.scaladsl.Source中reduce和runReduce之间的区别?

问题描述

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中试用示例