Emi*_*l D 7 scala executioncontext akka-stream
我刚刚开始使用Akka Stream,我正在尝试解决一些问题:
目前,我的流量,我使用mapAsync()与我的休息服务集成,为推荐这里.
我一直在想,mapAsync()应该使用什么执行上下文?它应该是我的ActorSystem的调度员吗?全球?两种情况都有不明显的后果吗?
我意识到这可能是一个愚蠢的问题,但我以前从未处理过Akka,在涉及Futures的任何scala应用程序中,我只使用过全局执行上下文.
该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(及其调度程序)实现流的实现.您不需要知道流实现的细节,但是流工作在更抽象的层次上,假设您可能有一个不同于Materializer
ActorSystem的流程
归档时间: |
|
查看次数: |
1500 次 |
最近记录: |