【发布时间】:2015-04-07 00:41:36
【问题描述】:
有没有办法直接从成功的承诺中获取价值?
为此,真的有必要将future 连接到承诺吗?
scala> import scala.concurrent._
import scala.concurrent._
scala> val result = Promise[Int]
result: scala.concurrent.Promise[Int] = scala.concurrent.impl.Promise$DefaultPromise@2b5fa85f
scala> result success 3
res0: result.type = scala.concurrent.impl.Promise$DefaultPromise@2b5fa85f
scala> result
res1: scala.concurrent.Promise[Int] = scala.concurrent.impl.Promise$DefaultPromise@2b5fa85f
scala> result.isCompleted
res4: Boolean = true
scala> result.value
<console>:12: error: value value is not a member of scala.concurrent.Promise[Int]
result.value
^
scala> result.future.value.get.get
res6: Int = 3
我正在考虑对线程安全的“赋值一次”语义使用承诺。 promise 对象在 scala.concurrent 源代码中看起来足够精简,据我所知,它是线程安全的。但是,我宁愿避免添加另一个对象(未来)。我找不到承诺的成功价值的吸气剂。
【问题讨论】:
-
不,按照承诺的设计。
-
也许更整洁:
Await.result(p.future, Duration.Zero) -
@BenReich 我相信这并不是更简洁,只是在实践中的假设不同。 Await.result 等待承诺,而 .value 假设它已经成功。不同的用例。
标签: scala