{ if (listChild.isOk()) { List list = listChild.-6ren">
gpt4 book ai didi

java - CompletableFuture 包装器

转载 作者:行者123 更新时间:2023-11-29 04:16:45 25 4
gpt4 key购买 nike

我有异步方法

asyncClass.getChild("test", listChild -> {
if (listChild.isOk()) {
List<String> list = listChild.isSuccess().getData()
}
return null;
});

如何在 CompletableFuture 中包装这个异步调用?

final CompletableFuture<List<String>> future = new CompletableFuture<>();
asyncClass.getChild("test", listChild -> {
if (listChild.isOk()) {
future.complete(listChild.isSuccess().getData());
}
return null;
});
return future;

一切正常,但我希望一切都在单独的线程调用中工作

interface AsyncFS {
fun getChild(path: String, onResult: (Result<List<String>>) -> Unit)
}

最佳答案

似乎asyncClass.getChild异步执行(因为它需要回调)。如果是这种情况,那么您当前的实现就足够了(除了下面的更正)。

asyncClass.getChild("test", listChild -> {
if (listChild.isOk()) {
future.complete(listChild.isSuccess().getData());
} else {
future.complete(null); //you need to do this
//or future.completeExceptionally(exception) if this is a failure
}
});

如果你想要getChild在单独的线程中运行,那么我强烈建议您重新设计方法以使其返回 List<String>而不是回调。这种设计使得运行起来很尴尬getChild异步。

interface AsyncFS {
fun getChild(path: String): List<String> //don't trust my syntax
}

然后以这种方式异步运行它:

CompletableFuture<List<String>> future = 
CompletableFuture.supplyAsync(() -> asyncClass.getChild("test"));
return future;

关于java - CompletableFuture 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51895573/

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