当前位置: 首页 > 知识库问答 >
问题:

如何辜负java.util.concurrent.未来

陆涵畅
2023-03-14

有相当多的io使用。维特斯。果心vertx生态系统中的未来:https://vertx.io/docs/apidocs/io/vertx/core/Future.html

使用VertxFuture的示例如下:

private Future<Void> prepareDatabase() {

  Future<Void> future = Future.future();

  dbClient = JDBCClient.createShared(vertx, new JsonObject(...));

  dbClient.getConnection(ar -> {    

    if (ar.failed()) {
      LOGGER.error("Could not open a database connection", ar.cause());
      future.fail(ar.cause());  // here
      return; 
    } 

    SQLConnection connection = ar.result();   
    connection.execute(SQL_CREATE_PAGES_TABLE, create -> {
        connection.close();   
        if (create.failed()) {
          future.fail(create.cause());  // here
        } else {
          future.complete();  
        }
     });
  });

  return future;
}

我的印象是,io。维特斯。果心未来java有关。util。同时发生的Future,但它似乎没有。正如您所看到的,告诉Vertx Future失败的方法是调用它的fail()方法

另一方面,我们有完全未来,这是一个实现的java.util.concurrent.未来接口:https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html

在CompletableFuture上我没有看到失败的方法,我只看到“resolve()”。

所以我的猜测是,让完全未来失败的唯一方法是抛出一个例外?

CompletableFuture<String> f = CompletableFuture.supplyAsync(() -> {
    throw new RuntimeException("fail this future");
    return "This would be the success result";
});

除了抛出一个错误,还有什么方法可以让一个完整的未来“失败”吗?换句话说,使用Vertx Future,我们只调用f.fail(),但是对于CompletableFuture呢?

共有1个答案

孟鹏海
2023-03-14

鼓励您抛出异常从供应Async()方法来描述失败。

如评论中所述,还有一个completeeexceptionaly()方法,如果您手头有一个未来,并且希望失败,可以使用该方法。

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html#completeExceptionally-爪哇。可丢弃的-

自Java9以来,如果您想返回一个已经失败的未来,还有CompletableFuture.failedFuture(Throwable ex)构造。

https://docs.oracle.com/javase/9/docs/api/java/util/concurrent/CompletableFuture.html#failedFuture-java.lang.Throwable-

 类似资料:
  • 相关:java.util.concurrent.Future的scala.concurrent.Future包装器 这来自我的另一个问题: 如何将akka streams Kafka(reactive-Kafka)集成到akka http应用中? 我有一个AKKA HTTP应用程序,我想在路由中的onComplete函数中向Kafka发送消息/产品记录,如下所示: 但是,on complete(p

  • 我在jetty异步超文本传输协议客户端上运行以下程序。 我得到的错误是 请在这方面帮助我摆脱错误::

  • 问题内容: 是否可以使用并发时保持正确性来重写下面的代码? 即从java.util.concurrent是否有可以代替的东西?请注意,仅替换为 显然行不通 问题答案: Guava的CacheBuilder类使您可以轻松地做到这一点。 请注意,在您使用实例的情况下,这会将键相等语义更改为,而不是将其替换为无关紧要,但这是一个潜在的陷阱。

  • 问题内容: 当我尝试这个 我可以很好地键入数字,这会过滤掉字母/字母数字字符串 例如,当我尝试使用“ s1”和“ s”时,它将转到(其他)。 问题是,当我输入负数(例如-1)时,“。isdigit”会将“-”符号计数为字符串值,并且拒绝它。我如何才能使’.isdigit’允许使用负号’-‘? 这是代码。我尝试过的东西。 问题答案: 使用try / except,如果我们不能转换为int,它将设置为

  • 本文向大家介绍Nginx如何配置负载均衡,包括了Nginx如何配置负载均衡的使用技巧和注意事项,需要的朋友参考一下 Nginx配置负载均衡 使用nginx来配置负载均衡也是比较简单的 首先在http块中配置虚拟域名所对应的地址 然后在server块中配置监听 这样在使用9000端口访问服务器的时候就会进行8080和8082的负载调用 Nginx 负载均衡策略 轮询(默认) 按照时间顺序逐一的分配到

  • 我有一个名为pct的数据集 我想使用ggplot2或绘图包获得正条形图和负条形图。 给定下表中的数据集 我想得到这样的东西