如何将 Future 转换为 Uni?
How to convert Future to Uni?
我有一个 Java API returns 一个 Future
实例。我需要将其转换为 Uni
。
从 mutiny 文档中,我看到 it is possible to convert a CompletionStage
to Uni
,但我找不到如何将标准 Future
转换为 Uni
。
问:如何将java.util.concurrent.Future
转换为Uni
?
我知道我可以将它的 get()
调用扭曲到 Uni
,但它会阻塞,不是吗?
Future
的问题在于它是一个阻塞 API,并且与 CompletionStage
不同,无法链接操作流。
但是,Mutiny a way to deal with blocking API:
Future future = ...;
Uni<Object> uni = Uni.createFrom()
.item( () -> future.get() )
.runSubscriptionOn( Infrastructure.getDefaultWorkerPool() );
更新:
我的答案适用于所有阻塞代码,但正确答案在评论中:
Uni.createFrom().future(future);
或
Uni.createFrom().future(() -> future))
我有一个 Java API returns 一个 Future
实例。我需要将其转换为 Uni
。
从 mutiny 文档中,我看到 it is possible to convert a CompletionStage
to Uni
,但我找不到如何将标准 Future
转换为 Uni
。
问:如何将java.util.concurrent.Future
转换为Uni
?
我知道我可以将它的 get()
调用扭曲到 Uni
,但它会阻塞,不是吗?
Future
的问题在于它是一个阻塞 API,并且与 CompletionStage
不同,无法链接操作流。
但是,Mutiny a way to deal with blocking API:
Future future = ...;
Uni<Object> uni = Uni.createFrom()
.item( () -> future.get() )
.runSubscriptionOn( Infrastructure.getDefaultWorkerPool() );
更新:
我的答案适用于所有阻塞代码,但正确答案在评论中:
Uni.createFrom().future(future);
或
Uni.createFrom().future(() -> future))