我剛開始接觸阿卡流和我試圖想辦法的mapAsync在阿卡流使用:的ExecutionContext與
目前,我的流量,我使用mapAsync()與我休息服務進行整合,建議here。
我一直想知道,有什麼執行上下文應mapAsync()是使用? 它應該是我的ActorSystem的調度員嗎?全球? 在這兩種情況下是否有任何非顯而易見的後果?
我意識到這可能是一個愚蠢的問題,但我從來沒有處理之前阿卡,並在涉及期貨的任何應用程序階,我只用過全球執行上下文。
我剛開始接觸阿卡流和我試圖想辦法的mapAsync在阿卡流使用:的ExecutionContext與
目前,我的流量,我使用mapAsync()與我休息服務進行整合,建議here。
我一直想知道,有什麼執行上下文應mapAsync()是使用? 它應該是我的ActorSystem的調度員嗎?全球? 在這兩種情況下是否有任何非顯而易見的後果?
我意識到這可能是一個愚蠢的問題,但我從來沒有處理之前阿卡,並在涉及期貨的任何應用程序階,我只用過全球執行上下文。
mapAsync階段不需要執行上下文,它只需要將當前流元素映射到Future
。未來的執行環境取決於誰創建它,流程不知道任何事情。
更一般地,Future[A]
是不要求你知道它的運行的抽象。它甚至可能是不需要執行上下文的預計算值:
def mappingFunction(x: Int) = Future.successful(x * 2)
Source(List(1, 2, 3)).mapAsync(1)(mappingFunction)
你只需要在創建未來擔心ExecutionContexts,但在mapAsync的情況下,你只是一個返回從功能。如何創造未來是該職能的責任。就mapAsync階段而言,它只是將未來作爲函數的返回值,即它不創建它。
流有Materializer
。它目前的實現是ActorMaterializer
,它使用ActorSystem(及其調度器)來實現流。儘管您不需要知道流實現的細節,但流的工作方式更抽象,假設您可以使用不同於ActorSystem的Materializer
mapAsync不需要任何執行上下文。你未來的執行上下文只取決於誰創建它,流無關吧:) –
好了,阿卡流是不應該知道在外部服務正在運行的執行上下文的。很高興知道:) –
是的,Future是一個抽象,不需要你知道它在哪裏運行。它甚至可能是一個預先計算的值afayk(Future.successful(x))。流量有他們自己的物化器(和演員系統和調度員等),但他們在更抽象的水平上工作 –