【发布时间】:2020-01-19 06:11:45
【问题描述】:
我有调用 computeParallel() 函数的函数,该函数调用 3 个 Futures F1,F2,F3 并返回 String 作为返回类型。
def computeParallel():String =
{
val f1 = Future { "ss" }
val f2 = Future { "sss" }
val f3 = Future { "ssss" }
val result: Future[String] = for {
r1 <- f1
r2 <- f2
r3 <- f3
} yield (r1 + r2 + r3)
Await.result(result,scala.concurrent.duration.Duration.Inf)
}
使用 Await 收集聚合结果。但是人们说使用 Await 是一种不好的编码方式。
所以我使用了下面的一个。它返回 Unit 类型。
result.onComplete {
case Success(res) => return res
}
因此,如果返回 Unit,我将无法打印任何内容。
有什么办法可以帮助我们解决这个问题吗
提前致谢
【问题讨论】:
-
在这种情况下会承诺帮助吗?
-
你需要做什么?打印什么?对结果做点什么?
-
从这里收集后我必须将结果传递给其他函数
-
那么只需
map或flatMap或foreach使用该功能您的未来。 - 你明白未来意味着异步计算吗,你等待的那一刻,你就破坏了它。所以通常所有的代码都应该适应异步的。但发生这种情况是因为你需要它,如果不是,你为什么首先使用期货? -
是的,就像@LuisMiguelMejíaSuárez 所说,您不需要计算,只需映射并将结果传递给另一个函数。 result.map(otherFunction(_)) 或只是 result.map(otherFunction)
标签: scala apache-spark user-defined-functions future futuretask