J'ai dû placer une requête HTTP de répartition dans un autre Future car il semble que la connexion réseau initiale puisse bloquer (dans Netty ou quoi que ce soit derrière Par exemple, lorsque l'ordinateur est uniquement connecté à un autre ordinateur avec une adresse IP statique et pas de DNS, les blocs système pendant dix secondes ou plus avant que le futur ne soit réellement créé). Ainsi, au lieu deCorriger la façon de bloquer le code qui bloque avant d'émettre un futur dans un autre futur
Http(req.OK(JsonUTF))
J'ai maintenant
Future {
blocking(
Http(req.OK(JsonUTF))
)
} .flatMap(identity)
Est-ce exact? Y at-il un inconvénient de flatMap(identity)
sur flatten
, qui est seulement dans Scala 2.12 et utilise un "exécuteur interne"?
Ou devrais-je utiliser
Future {
val jsonFut = blocking(
Http(req.OK(JsonUTF))
)
Await.result(jsonFut, Duration.Inf)
}
?
Est-ce que 'Future.successful (()). FlatMap (x)' est différent de 'Future (x) .flatMap (identity)'? –
Oui. Future.apply (x) est synthétiquement équivalent à Future.successful (()). Map (_ => x) –
Future (x) .flatMap (identité) est comme suit: Future.successful (()). Map (_ => x) .flatMap (identité). Et ce que vous voulez, c'est Future.successful (()). FlatMap (_ => x) –