以下是官方文档中的一个示例:
val f = Future { 1 }
val p = Promise[Int]
p completeWith f
p.future onSuccess {
case x => println(x)
}
这似乎是太多的仪式,因为这个想法可以更简洁地表达出来:
f onSuccess {
case x: Int => println(x)
}
completeWith
在现实世界中有用吗?
答案 0 :(得分:2)
Promises
通常用于为Future
创建更复杂的组合器和方法,您可以看到它广泛用于Future
的实现
https://github.com/scala/scala/blob/v2.11.7/src/library/scala/concurrent/Future.scala#L1
除非您想扩展Future
的功能或创建自己的异步api,否则很少在常规代码中使用它。
有关课程https://www.coursera.org/course/reactive的有趣课程涵盖Futures
。在作业中,您应该为Future
实现和使用许多不同的方法,Promises
非常有用,甚至需要这样做。
答案 1 :(得分:1)
Promise
是一次写入值,由首先写入它的人完成。在某些情况下,当有多个Future
竞争完成它时,它很有用。在你的例子中,它显然没那么有用,但情况并非总是如此。
修改:在此处找到了更长的解释:What are the use cases of scala.concurrent.Promise?。