【发布时间】:2016-03-19 08:59:52
【问题描述】:
我使用mapAync(1) 的代码不能按我的意愿工作。但是当我通过使用Await.result 将mapAsync(1) 更改为map 时,它可以工作。所以我有一个问题。
以下(A) Use map 和(B) use mapAsync(1) 在任何时候都会产生相同的结果吗?
// (A) Use map
someSource
.map{r =>
val future = makeFuture(r) // returns the same future if r is the same
Await.result(future, Duration.Inf)
}
// (B) Use mapAsync(1)
someSource
.mapAsync(1){r =>
val future = makeFuture(r) // returns the same future if r is the same
future
}
其实我是想粘贴我的真实代码,但是粘贴时间太长,而且对我的原始阶段有一些依赖。
【问题讨论】:
-
mapAsync本身返回一个Future[T],我认为实际上不需要用makeFuture创造的另一个未来来包装它。 -
非常感谢您的回复。对不起,但我无法理解你所说的。我认为
Source[O, Mat]#mapAsync[T](par: Int)(f: O => Future[T])返回Source[T, Mat],而不是Future[T]。 -
makeFuture的代码是什么样的,r的类型是什么? -
对不起我的无良代码。在我的真实代码中,
r的类型是akka.util.ByteString,但我认为类型可以是任何东西。 -
感谢您和其他回答者,我的代码确实按照我的意愿工作。在制作复现代码的过程中,我收集了我的错误。错误出现在我原来的 GraphStage 中。非常感谢!
标签: scala akka akka-stream