akka.stream.scaladsl.Source 中 reduce 和 runReduce 的区别?
Difference between reduce and runReduce in akka.stream.scaladsl.Source?
akka.stream.scaladsl.Source.reduce() 和 runReduce() 函数有什么区别?
我在这里查看 https://doc.akka.io/api/akka/current/akka/stream/scaladsl/Source.html 很明显 reduce()
使用第一个元素作为“基础”“折叠”所有元素。我不太明白将 runReduce()
用于 运行 这个 Source
和 reduce()
函数有什么好处。为什么它 return 一个 Future
?
执行 akka 流需要 2 个步骤:
- 构建蓝图
- 运行它(so-called实现)
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
随时尝试 playground 中的示例 https://scastie.scala-lang.org/2Iure8pDSUWcLjFVGflyUQ
akka.stream.scaladsl.Source.reduce() 和 runReduce() 函数有什么区别?
我在这里查看 https://doc.akka.io/api/akka/current/akka/stream/scaladsl/Source.html 很明显 reduce()
使用第一个元素作为“基础”“折叠”所有元素。我不太明白将 runReduce()
用于 运行 这个 Source
和 reduce()
函数有什么好处。为什么它 return 一个 Future
?
执行 akka 流需要 2 个步骤:
- 构建蓝图
- 运行它(so-called实现)
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
随时尝试 playground 中的示例 https://scastie.scala-lang.org/2Iure8pDSUWcLjFVGflyUQ