8

我刚刚开始使用 Akka Stream,我正试图弄清楚:

目前,在我的流程中,我正在使用 mapAsync() 与我的休息服务集成,如此处所推荐

我一直在想, mapAsync() 应该使用什么执行上下文?它应该是我的 ActorSystem 的调度员吗?全球?在这两种情况下是否有任何不明显的后果?

我意识到这可能是一个愚蠢的问题,但我以前从未处理过 Akka,在任何涉及 Futures 的 scala 应用程序中,我只使用过全局执行上下文。

4

1 回答 1

8

mapAsync阶段不需要执行上下文,它只需要您将当前流元素映射到Future. 未来的执行上下文取决于谁创建它,流程对此一无所知。

更一般地说,aFuture[A]是一种抽象,不需要您知道它在哪里运行。它甚至可以是一个不需要执行上下文的预计算值:

def mappingFunction(x: Int) = Future.successful(x * 2)
Source(List(1, 2, 3)).mapAsync(1)(mappingFunction)

您只需要在创建 Future 时担心 ExecutionContexts,但在 mapAsync 的情况下,您只是从函数中返回一个。如何创造未来是职能部门的责任。就mapAsync 阶段而言,它只是将future 作为函数的返回值,即它不创建它。

流有一个Materializer. 它当前的实现是ActorMaterializer,它使用 ActorSystem (及其调度程序)实现流。但是,您不需要了解流具体化的细节,流在更抽象的级别上工作,假设您可能有一个Materializer不能与 ActorSystem 一起使用的不同

于 2016-03-09T14:17:16.857 回答