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

期望从这两个完全未来得到相同的结果

黄无尘
2023-03-14

但是,testCase2不处理异常并引发错误。我是不是漏掉了什么?抱歉,我是新手。

@Test
public void testCase1() throws Exception {
    CompletableFuture.supplyAsync(() -> {
        if (true) throw new RuntimeException();
        return "Promise";
    }).exceptionally((ex) -> {
        return "Fake Promise";
    }).get();
}

@Test
public void testCase2() throws Exception {
    CompletableFuture<String> cf = CompletableFuture.supplyAsync(() -> {
        if (true) throw new RuntimeException();
        return "Promise";
    });
    cf.exceptionally((ex) -> {
        return "Fake Promise";
    });
    cf.get();
}

共有1个答案

亢琦
2023-03-14

但是,testCase2不处理异常

您的TestCase2确实处理了该异常,您可以添加额外的print语句来检查该异常。

testcase2引发异常的原因是代码

cf.exceptionally((ex) -> {
        System.out.println("Fake Promise: " + System.nanoTime());
        return "Fake Promise";
    })

将返回一个新的completablefuture但您只是丢弃它,则cf.get中的变量cf仍未注册到任何异常处理程序。守则应为:

@Test
public void testCase2() throws Exception {
    CompletableFuture<String> cf = CompletableFuture.supplyAsync(() -> {
        if (true) throw new RuntimeException();
        return "Promise";
    });
    CompletableFuture<String> handledCf = cf.exceptionally((ex) -> {
        return "Fake Promise";
    });
    return handledCf.get();
}
 类似资料:
  • 我有两个不同的CompletableFuture,我喜欢并行运行(每个都有不同的返回类型),然后结合它们的结果: 现在我喜欢把dog.name 我想用 但我在这里很烂。

  • 我有一个相当普遍或独特的要求。例如,我有以下列表:

  • 输出如下:http://imgur.com/a/nu3n6

  • 当我使用完全的未来。allOf()组合javadoc中描述的独立可完成的未来,在提供给该方法的所有未来之后,它不能可靠地完成。例如。: 结果如下: 我希望日志“Joined”和“Completed allOf”写在“Completed f1”和“Completed f2”之后。为了让事情变得更加混乱,阵列中的未来顺序似乎是头等大事。如果我换了台词 到 结果输出更改为: 更糟糕的是,如果我多次运行完

  • 我使用的是SpringBoot和SpringDataJPA,我有一个逻辑,它由3个数据库请求组成,我想并行运行。我想在将来用于此目的。 最后,我需要从5 db查询运行的结果中构建响应对象。 所以我创造了完全未来 那我打算用。与这个未来无关。但我对循环调用有问题。如何重写它以在每个请求中使用callable,我需要从请求中传递值,然后按键排序到map中?

  • 问题内容: 我正在尝试使用以下函数将DIP转换为像素。我尝试了低密度,中密度和高密度仿真器,无论使用哪种仿真器,像素值都与传递给函数的骤降值保持相同。 我到底在这里做错了什么? 问题答案: 这是我自己的错。模拟器基本上是在欺骗系统,并告诉我的应用它的分辨率是xy。根据Android支持屏幕文档,所有操作应做的部分。我需要在正确的文件夹中正确设置资源,以便它不再对我的应用程序说谎。