【问题标题】:How to convert Future to Uni?如何将 Future 转换为 Uni?
【发布时间】:2021-07-22 02:45:38
【问题描述】:

我有一个返回 Future 实例的 Java API。我需要将其转换为Uni。 从 mutiny 文档中,我看到了 it is possible to convert a CompletionStage to Uni,但我找不到如何将标准的 Future 转换为 Uni

问:如何将java.util.concurrent.Future转换为Uni

我知道我可以将它的 get() 调用扭曲到 Uni,但它会阻塞,不是吗?

【问题讨论】:

    标签: java vert.x quarkus mutiny


    【解决方案1】:

    Future 的问题在于它是一个阻塞 API,并且与 CompletionStage 不同,它无法链接操作流。

    然而,Mutiny 有a way to deal with blocking API:

    Future future = ...;
    Uni<Object> uni = Uni.createFrom()
        .item( () -> future.get() )
        .runSubscriptionOn( Infrastructure.getDefaultWorkerPool() );
    

    更新:

    我的答案适用于所有阻塞代码,但正确答案在 cmets 中:

    Uni.createFrom().future(future);
    

    Uni.createFrom().future(() -> future))
    

    【讨论】:

    • 谢谢。但它如何回答我的问题?
    • 对不起... 太晚了,我在想CompletableFuture 而不是Future。我会更新答案:)
    • 您可以使用Uni.createFrom().future(future)Uni.createFrom().future(() -&gt; future))
    猜你喜欢
    • 2021-04-20
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2016-05-04
    相关资源
    最近更新 更多