【问题标题】:Akka Stream: Which one is better - scan or scanAsync?Akka Stream:哪个更好 - scan 或 scanAsync?
【发布时间】:2018-04-01 04:30:23
【问题描述】:

我是 Akka Stream 的新手,如果我问任何愚蠢的问题,请道歉。

我正在通过 Akka Stream QuickStart guide。我发现scan 操作。文档说它类似于fold,但不是终端操作。我得到了那部分,但是当我找到 scanAsync 时,文档说了同样的话,除了一件事,即它类似于 scan 但具有异步功能。

现在,我的疑问是:

  1. 它们之间有什么区别?并且,
  2. 哪个更好用?

【问题讨论】:

    标签: scala akka akka-stream


    【解决方案1】:
    1. 它们之间的主要区别在于给定函数f的结果不同。 scanAsync 的情况下 f 函数的输出值为 Future。因此,下一次计算将在 Future 完成后立即开始。但是,当使用 scan 时,下一个值的计算将在当前值的计算之后立即开始。
    2. 一般回答:视情况而定。但是这里有一些建议:当下一个值的计算仅取决于 CPU 并且没有临时磁盘/网络读/写时,您应该使用 scan,否则使用 scanAsync

    希望对你有帮助!!!

    【讨论】:

    • 感谢您的回复!但是,我有一个疑问 - scanAsync 是否告诉了发生故障的确切 Future 计算?
    • @himanshuIIITian 我不太明白你的意思,但 Scala Future 总是提供 Success 或 Failure 返回值。所以我认为,是的。
    • @akauppi 我的意思是 - scanAsync 在一系列 Future 上工作,对吧?那么,它会告诉我哪个Future 操作失败了?
    • 我认为这不是它的工作。取决于您以后如何处理这些 Futures(例如,在它们上运行 onComplete,并且能够检测到错误)。提供 Future 的标识值是您的工作(流 id,可能是索引;您可以为此使用 .zip 和 .zipWithIndex);那么您将能够在 onComplete 中将它们区分开来。无论如何,这是推测性的,超出了我认为已经回答的原始问题。
    • 好的 - 我明白了。我期待 akka-streams 开箱即用地提供它。
    猜你喜欢
    • 2021-10-20
    • 2013-03-16
    • 1970-01-01
    • 2011-02-22
    • 2013-06-06
    • 2013-11-02
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    相关资源
    最近更新 更多