未来宣言似乎与承诺无关

时间:2016-06-25 16:19:03

标签: scala promise future

我正在阅读这篇文章http://danielwestheide.com/blog/2013/01/16/the-neophytes-guide-to-scala-part-9-promises-and-futures-in-practice.html,我正在看这段代码:

object Government {
  def redeemCampaignPledge(): Future[TaxCut] = {
    val p = Promise[TaxCut]()
    Future {
      println("Starting the new legislative period.")
      Thread.sleep(2000)
      p.success(TaxCut(20))
      println("We reduced the taxes! You must reelect us!!!!1111")
    }
    p.future
  }
}

我已经看过几次这种类型的代码了,我很困惑。我们有Promise

val p = Promise[TaxCut]()

这是Future

Future {
  println("Starting the new legislative period.")
  Thread.sleep(2000)
  p.success(TaxCut(20))
  println("We reduced the taxes! You must reelect us!!!!1111")
}

我没有看到他们之间的任何分配,所以我不明白:他们是如何联系的?

1 个答案:

答案 0 :(得分:3)

  

我没有看到他们之间的任何分配,所以我不明白:怎么样   他们有联系吗?

Promise是创建Future的一种方法。

当您使用Future { }并导入scala.concurrent.ExecutionContext.Implicits.global时,您将在Scala的一个线程池线程上排队一个函数。但是,这不是生成Future的唯一方法。 Future不一定需要安排在不同的线程上。

这个例子的作用是:

  1. 创建一个Promise[TaxCut],将在不久的将来某个时间完成。
  2. 通过Future apply对要在线程池线程内运行的函数进行排队。此功能还通过Promise.success方法
  3. 完成Promise
  4. 通过Promise.future返回承诺生成的未来。当这个未来返回时,它可能还没有完成,这取决于排队到Future的函数的执行执行速度有多快(OP试图通过Thread.sleep方法传达这个,延迟了完成未来)。