在Vert.x中,future和promise有什么区别?

19

通常我会看到在 vert.x verticle 的开头使用promisefuture,它们之间有什么特定的区别吗? 我已经阅读了Scala语言中它们的区别,那在Vert.x的情况下也是一样吗? 此外,我应该知道何时使用 promise 或 future?

5个回答

8

我读过的最好的解释:

将 Promise 视为生产者(由异步操作的一侧的生产者使用),将 Future 视为消费者(由另一侧的消费者使用)。

Futures vs. Promises


6

Promise用于定义非阻塞操作,它的future()方法返回与promise相关联的Future对象,以便在promise完成时得到通知并检索其值。 Future接口是可能已经发生或尚未发生的操作的结果。


4

虽然其他答案已经用不同的措辞表达了相同的意思,但我还是想帮助您。假设您正在封装一些旧的API(例如基于回调的API)以使用Futures,则可以像这样操作:

Future<String> getStringFromLegacyCallbackAPI() {
   Promise<String> promise = Promise.promise();
   legacyApi.getString(promise::complete);
   return promise.future();
}

请注意,调用此方法的人会得到一个Future对象,因此他们只能指定成功或失败后应该发生什么(不能触发完成或失败)。因此,我认为您不应将Promise对象传递给上层代码 - 而是应该返回Future对象,并将Promise对象保留在可以解决或拒绝它的代码控制下。

2
我认为这是 Promise 的一个非常有用的总结。 - Lebecca

0
作为一个释义,未来对象是一个只读容器,它存储尚不存在的结果;而 Promise 对象可以被写入(通常只能写入一次)。更多信息请参见此处

0
一个Promise也是一个可写的动作侧面,这个动作可能已经发生或者还没有发生。根据维基百科的定义:
Given the new Promise / Future APIs the start(Future<Void>) and stop(Future<Void>) methods have been deprecated and will be removed in Vert.x 4.

请迁移到 start(Promise) 和 stop(Promise) 变体。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接