gpt4 book ai didi

java - 在 lambda 中设置 CompletableFuture 的值

转载 作者:行者123 更新时间:2023-12-02 01:51:12 24 4
gpt4 key购买 nike

我有以下代码:

public CompletableFuture<Object> send(String message) {
CompletableFuture<Object> response = new CompletableFuture<>();
KafkaProducerRecord<String, String> record = ...
KafkaProducer producer = ...
producer.write(record, done -> {
if(done.succeeded()) {
Object o = ...
response.complete(...);
}
else {
Object o = ...
response.complete(...);
}
});

return response;
}

问题是,当调用 response.complete() 并传递正确的值时,无论 done.succeeded() 是 true 还是 false,response .result 始终返回为 null。只有在返回之前在 lambda 表达式外部调用 response.complete() 时,才会设置 response.result

在调用方法中我尝试了以下方法:

CompletableFuture<IResponse> resp = this.send(message);
try {
System.out.println(resp.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}

但这只是挂起。将 CompletableFuture 包装在 Observable 中,然后在 Observable 上执行 subscribe() 时也是如此,如下所示:

Observable.fromFuture(this.send(message)).subscribe(i -> {});

谁能帮忙,谢谢。

最佳答案

response.result is always being returned as null

您是如何进入该领域的?它是一个内部字段,用于存储计算后的结果。

要获取结果,您需要调用 get() ,该调用将阻塞直到结果准备就绪,或者调用 isDone() 来检查结果是否准备就绪。

关于java - 在 lambda 中设置 CompletableFuture 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52969121/

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