在scala承诺中使用completeWith

时间:2016-01-21 10:15:17

标签: scala concurrency promise

以下是官方文档中的一个示例:

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在现实世界中有用吗?

2 个答案:

答案 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?

相关问题