阻止坏,异步好,但在未来阻止仍然阻塞?这是我不断回归的事情;考虑遵循伪代码:
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
在最后一行,我在 inner future 上通过 blocking 将 Future[Seq[Future[String]]]
(注意 future 在 future 内)转换为 Future[Seq[String]]
.
阻碍未来的未来感觉多余,至少在这里,但在未来拥有未来也感到多余 .
你能提出一种更聪明的方式摆脱内心的未来吗?
你认为阻碍未来的未来是坏事吗?如果是这样的原因和在什么情况下?
1 回答
是的,未来的阻塞是阻塞的,你应该避免这种情况,因为资源会被阻塞以等待结果,即使它们在另一个线程中 .
如果我理解正确,您的问题是如何以非阻塞方式将
Future[Seq[Future[String]]]
转换为Future[Seq[String]]
.你可以用for-comprehensions做到这一点:
EDIT: 或者只是: