理解Scala Futures和Promises

3

我试图理解这个概念。我清楚地了解 Futures 是什么。但是 Promises 让我有些困惑。以下是代码片段:

val p = Promise[Int]() // gives me a DefaultPromise
val f = p.future // gives me the future computation for the Promise p

现在我们来看一下以下两个代码段之间的区别是什么?
p success { 10 }

并且。
val x = Future {
  p success { 10 }
}

我理解第一个代码片段是指p success将会完成与该p相关联的future计算。那么这个计算是否是异步的?这与使用Future块完成与Promise p相关联的Future f的第二个代码片段有何不同?


1
承诺是未来的源头。未来是你可以订阅的内容。承诺指定了你如何创建未来。 - Benjamin Gruenbaum
1
我向您推荐这个教程:实践中的 Promises 和 Futures至于您所要求的代码,您可以在其中找到对您代码的解释:Promise 实例总是与 Future 实例精确地关联。如果您在 REPL 中再次调用 Future 的 apply 方法,您会发现返回的 Future 也是一个 Promise。 - anquegi
1
@user3102968,如果你认为有可能失败的计算,可以将其包装在一个 Future 中,以防 promise 不需要。 另外,如果发生故障,可以使用 p failure trowable - Carlos Vilchez
我还是不太明白。为什么我需要 Promise,而不是使用 Future?是因为你不能将值传递到 Future 块中,而需要使用 Promise 吗? - joesan
@user3102968,我认为这就是重点。我认为你大部分时间会使用Future在这个链接中,你可以找到Promise的用例。我会写一个回复来总结所有这些。 - Carlos Vilchez
显示剩余3条评论
1个回答

3
在您的示例中,您可以将p success { 10 }Future(10)视为等效。您只需要从p中提取future即可获得相同的结果。
您可以将Promises视为可写的Future,在其中定义计算的成功或失败。由于它看起来有点类似命令式编程,所以您可能只会在非常特殊的情况下使用它们。您可以在此链接中看到其中一些用例。

p.success { 10 }.future 不就等于 Future(10) 吗?p success { 10 } 是一个 Promise 类型! - joesan
你是对的。你需要使用.future函数来提取Promise的Future,以获得相同的结果。 - Carlos Vilchez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接