akka-stream - akka.stream.scaladsl.Source 中 reduce 和 runReduce 的区别?
问题描述
akka.stream.scaladsl.Source.reduce() 和 runReduce() 函数有什么区别?
我在这里检查了https://doc.akka.io/api/akka/current/akka/stream/scaladsl/Source.html很明显,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
推荐阅读
- python-3.x - 从 Facebook 公开帖子中抓取图像的元数据
- c++ - 使用 CGAL 简化组合图
- c# - 在 ASP.NET Core 中应该将具有长期连接的类放在哪里?
- c++ - 尝试使用 urlmon.dll 下载文件时如何修复“运行时检查失败 #0”错误?
- appium-ios - 在 AWS Device Farm 上执行 iOS Appium TestNG 测试用例时获取“org.openqa.selenium.WebDriverException”
- excel - 如何在excel中查找和替换大型数据集中的不同值?
- mysql - SQL 查询以选择满足先决条件要求的主题
- php - htaccess 文件在 Linux 上的 Laravel 中无法正常工作
- python - 在 VS Code 中使用 Python 调试器
- javascript - 使用 jQuery 从 txt 文件中获取菜单和子菜单 JSON 数据