0
我必须将一个调度http请求包装到另一个Future中,因为它看起来最初的网络连接可能会阻塞(在Netty中或其后面 - 这是为了例如,当计算机仅连接到具有静态IP且没有DNS的其他计算机时;在未来实际创建之前,系统块需要十秒或更长时间)。因此,而不是纠正在未来发布之前阻塞的代码的正确方法
Http(req.OK(JsonUTF))
我现在有
Future {
blocking(
Http(req.OK(JsonUTF))
)
} .flatMap(identity)
这是正确的吗? flatMap(identity)
与flatten
相比有什么缺点,它只在Scala 2.12中使用,并使用一些“内部执行程序”?
或者我应该使用
Future {
val jsonFut = blocking(
Http(req.OK(JsonUTF))
)
Await.result(jsonFut, Duration.Inf)
}
?
所以'Future.successful(())。flatMap(x)'不同于'Future(x).flatMap(identity)'? –
是的。 Future.apply(x)合成等价于Future.successful(())。map(_ => x) –
Future(x).flatMap(identity)就像这样:Future.successful(())。map(_ => x).flatMap(identity)。你想要的是Future.successful(())。flatMap(_ => x) –