在Akka-Streams中与mapAsync一起使用的ExecutionContext

Emi*_*l D 7 scala executioncontext akka-stream

我刚刚开始使用Akka Stream,我正在尝试解决一些问题:

目前,我的流量,我使用mapAsync()与我的休息服务集成,为推荐这里.

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

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

Gio*_*tti 8

mapAsync阶段并不需要一个执行环境,它只需要将当前流元素映射到Future.未来的执行环境取决于谁创造它,流程对它一无所知.

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

def mappingFunction(x: Int) = Future.successful(x * 2)
Source(List(1, 2, 3)).mapAsync(1)(mappingFunction)
Run Code Online (Sandbox Code Playgroud)

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

流量有一个Materializer.它的当前实现是ActorMaterializer使用ActorSystem(及其调度程序)实现流的实现.您不需要知道流实现的细节,但是流工作在更抽象的层次上,假设您可能有一个不同于MaterializerActorSystem的流程