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) –