【问题标题】:Usage of completeWith in scala promises在 scala 承诺中使用 completeWith
【发布时间】:2016-01-21 10:15:16
【问题描述】:

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

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

【问题讨论】:

    标签: scala concurrency promise


    【解决方案1】:

    Promises 通常用于为Future 创建更复杂的组合子和方法,您可以看到它在Future 的实现中被广泛使用

    https://github.com/scala/scala/blob/v2.11.7/src/library/scala/concurrent/Future.scala#L1

    它很少用于常规代码,除非你想扩展Future 的功能或创建自己的异步 api。

    Coursera 上有一个有趣的课程https://www.coursera.org/course/reactive,涵盖了Futures。在作业中,您应该为Future 实施和使用许多不同的方法,而Promises 非常有帮助,甚至需要这样做。

    【讨论】:

      【解决方案2】:

      Promise 是一次写入值,由先写入它的人完成。在某些情况下,当有多个Futures 竞争完成它时,它很有用。在您的示例中,它显然不是那么有用,但并非总是如此。

      编辑:在这里找到更长的解释:What are the use cases of scala.concurrent.Promise?

      【讨论】:

        猜你喜欢
        • 2015-01-31
        • 2015-07-23
        • 1970-01-01
        • 2016-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-17
        相关资源
        最近更新 更多