gpt4 book ai didi

java - 复合 future 尚未完成

转载 作者:行者123 更新时间:2023-12-01 17:22:49 25 4
gpt4 key购买 nike

我正在使用 Vert.x 和用 Java 编写的 MainVerticle。我需要在可配置数量的实例中部署不同类型的 verticle。因此,这就是为什么我尝试创建一个 future 列表,然后我可以使用 CompositeFuture.all() 来完成该过程。

问题是复合 future 永远不会调用处理程序。对于每个 verticle,都会显示消息 [>] Deployed verticle...。但最后,消息[>] Verticles部署完成永远不会出现。 verticle 正在工作,但当所有部署人员准备就绪时,我需要执行另一个操作。

这是片段:


private Future<Void> loadVerticles()
{
Promise<Void> promise = Promise.promise();

List<Future<Void>> verticleDeployments = new ArrayList<>();

for (Integer i = 0; i < instancesA; i++)
verticleDeployments.add(deployHelper(ApiVerticleA.class.getName()));

for (Integer i = 0; i < instancesB; i++)
verticleDeployments.add(deployHelper(ApiVerticleB.class.getName()));

for (Integer i = 0; i < instancesC; i++)
verticleDeployments.add(deployHelper(ApiVerticleC.class.getName()));

CompositeFuture.all(new ArrayList<>(verticleDeployments)).setHandler( result -> {
if (result.succeeded()) {
System.out.println("[>] Verticles deployment complete"); // This message never appears
promise.complete();
}
else
promise.fail(result.cause());
});

return promise.future();
}


private Future<Void> deployHelper(String name)
{
Promise<Void> promise = Promise.promise();
vertx.deployVerticle(name, res -> {
if(res.failed()) {
System.out.println("[>] Failed to deploy verticle " + name);
promise.fail(res.cause());
} else {
System.out.println("[>] Deployed verticle " + name); // This message is printed for each verticle instance
promise.complete();
}
});
return promise.future();
}

最佳答案

顶点的启动方法中有一些条件。在某些情况下,对于 verticle 实例, promise 并未完成。

@Override
public void start(Promise<Void> startPromise) {

/*
* Some async conditions logic
*/

startPromise.complete(); // Some promises never were completed
}

关于java - 复合 future 尚未完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61262874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com