阻塞是不好的,异步是好的,但在一个future中进行阻塞是否仍然会阻塞?这是我一直在思考的问题;请考虑以下伪代码:
def queryName(id:Id):Future[String]
def queryEveryonesNames:Future[Seq[String]] = {
val everyonesIds:Future[Seq[Id]] = getIds
val everyonesNames:Future[Seq[Future[String]]] = {
everyonesIds.map(seq.map(id=>queryName(id)))
}
// I'm trying to understand the impact of what I'll do below
everyonesNames.map(seq=>seq.map(fut=>blocking(fut, 1 s)))
}
queryEveryonesNames
在最后一行代码中,我通过阻塞内部的Future将
Future [Seq [Future [String]]]
(注意Future内嵌)转换为Future [Seq [String]]
。在这里,阻塞内部Future似乎是多余的,但是内嵌Future也是多余的。
您能否提出一种更聪明的方法来消除内部的Future?
您认为在Future内部阻塞Future是不好的吗?如果是,为什么?在什么情况下?
in.flatMap( Future.sequence )
就可以得到相同的结果。 - paradigmaticFuture
伴生对象有一些非常有用的方法,感谢介绍。干杯! - Dominykas Mostauskis