【发布时间】:2018-04-14 10:03:02
【问题描述】:
一个相关问题:Why do we need both Future and Promise?
如果我正确理解了 Scala Future/Promise API,Future 和 Promise 之间存在一对一的关系,并且可以从 Promise 转到对应的 Future,但反之则不行。
在我目前看到的代码示例中,(异步)任务实现者可能会使用 Promise,但最终返回给客户端的是相应的 Future 以从中读取结果。
这是有道理的,因为作为任务实施者,我不希望客户能够将任务设置为已完成,仅在完成时读取其结果。
因此,Promise 通常被描述为必不可少,因为它是任务实现者更新/写入(仅一次)任务结果的方式,而 Future 是客户端读取结果的方式。
我理解为什么 Promise 可能有用或“可以拥有”作为 Future 的内部实现细节。
但是,将 Promise 作为公共 API 公开给开发人员真的有必要吗?作为任务实现者,我可以在没有 Promise API 的情况下创建所需的 Future,只需 Future.apply。
在我传递给Future.apply 的代码块中,我可以决定返回什么作为成功结果,以及何时抛出异常。这相当于我可以用 Promise 做的事情。
在我看来,最初只有 Promise 之类的东西,具有查询 Promise 以获取已委托给 Future 的已完成结果(值/异常)的附加功能。只是后来 Future 被添加到 API 中,但由于某种原因,Promise 一直暴露在外。
所以我的问题是,Promise 中是否有什么是 Future 无法完成的,或者说 Promise 是多余的?
注意:我不是在问 Promise 和 Future 是否是两个不同的概念,它们证明了不同的实体。我在问 Promise 是否提供了 Future 单独无法实现的实用能力。
【问题讨论】: