vertx中的未来和承诺有什么区别



我通常看到在vert.x vertical的开头使用promisefuture。两者之间有什么具体的区别吗?我读过它们在Scala语言中的差异,在Vert.x的情况下也是一样的吗?我什么时候应该知道什么时候该使用承诺或未来?

我读过的最好的东西:

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

期货与承诺

Promise用于定义非阻塞操作,它是future((方法返回与Promise关联的future,以获得Promise完成的通知并检索其值。Future接口是可能发生或尚未发生的操作的结果。

游戏有点晚了,其他答案用不同的词表达了同样多的意思,但这可能会有所帮助。假设您正在包装一些较旧的API(例如基于回调的(以使用Futures,那么您可能会这样做:

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

请注意,调用此方法的人会得到一个Future,因此他们只能指定在成功完成或失败的情况下应该发生什么(他们不能触发完成或失败(。所以,我认为你不应该把承诺传递到堆栈上——相反,未来应该被归还,承诺应该在可以解决或拒绝它的代码的控制下。

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.

请迁移到开始(Promise(和停止(Promise(变体。

转述一下,

future是一个只读容器,用于尚未存在的结果,而promise可以被写入(通常只能写入一次(。

最新更新