gpt4 book ai didi

java - ListenableFutureCallback - onFailure 永远不会被调用

转载 作者:行者123 更新时间:2023-11-30 06:09:49 26 4
gpt4 key购买 nike

我正在玩“ListenableFutureCallback”。 onSuccess() 工作正常,但 onFailure 永远不会被调用。下面是一些示例代码。

@Service
public class AsyncClass {

@Async
public ListenableFuture<String> execute(Callable<String> callable) throws Exception {
String str = callable.call();
//To force an exception to occur
str.toString();
return new AsyncResult<>(str);
}
}

public void futureMethod(String str) throws Exception {

AsyncClass asyncClass = new AsyncClass();

ListenableFuture<String> future = asyncClass.execute(() -> {
return str;
});

future.addCallback(new ListenableFutureCallback<Object>() {

@Override
public void onFailure(Throwable ex) {
System.out.println("FAIL");
}

@Override
public void onSuccess(Object result) {
System.out.println("SUCCESS");
}
});
}

onSuccess 工作正常。

futureMethod("test value");
Console: SUCCESS

onFailure 但不起作用。

futureMethod(null);
Console: java.lang.NullPointerException: null

最佳答案

您没有使用可监听的 future。您正在执行代码并将结果放入可监听的 future 。

为了触发 onFailure,您需要在 future 中运行失败的代码,或者在出现异常的情况下完成 future。

例如

Futures.immediateFailedFuture(new RuntimeException("woops"));

可监听的 future 通常应该从 ListeningExecutorService 中检索。 ListenableFutureCompletableFuture 不同,无法在外部完成。

关于java - ListenableFutureCallback - onFailure 永远不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50514101/

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