我正在玩'ListenableFutureCallback'。 onSuccess()工作正常,但永远不会调用onFailure。下面是一些示例代码。
tradesDF.write.option("parquet.block.size", 256 * 1024 * 1024)
onSuccess工作正常。
@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");
}
});
}
然而,futureMethod("test value");
Console: SUCCESS
答案 0 :(得分:1)
你没有使用可听的未来。您正在执行代码并将结果置于可听的未来。
为了触发onFailure,您需要在将来运行失败的代码或完成未来,但有例外。
例如
Futures.immediateFailedFuture(new RuntimeException("woops"));
通常可以从ListeningExecutorService
检索可收听期货。与ListenableFuture
不同,CompletableFuture
不能在外部完成。