【发布时间】:2018-10-09 12:26:37
【问题描述】:
我是 Java 8 的新手,并且正在学习 CompletableFuture API。 我还有一个要求,我需要对第三方 API 进行异步调用,然后等待 7 秒。 7秒后,继续我的实际处理。 我还需要检查这 7 秒内的异步调用是否成功完成。如果是,则记录成功响应,或者如果异步调用异常完成,则在我的数据库中记录错误响应。
CompletableFure<Void> thridPartyCallFuture = Async Call to Third Party API;
//Wait for 7 seconds
我不需要从第三方 API 调用中检索任何响应,我只需要暂停 7 秒。
所以我试着打电话给thridPartyCallFuture.get(7, TimeUnit.SECONDS);
但问题是当我调用thridPartyCallFuture.isDone() 时它总是会返回true,但如果thridPartyCallFuture 异常完成,我不会知道,这对于在DB 中记录错误响应很重要。让我们考虑一下第三方 API 关闭并且我们的调用异常完成的场景。在这种情况下,isDone() 将返回 true 而isCompletedExceptionally() 将返回 false。
检查thridPartyCallFuture 是否成功完成,然后在数据库中记录成功响应。
检查thridPartyCallFuture是否异常完成,然后在数据库中记录错误响应。
我曾尝试探索acceptEither,但未能正确。
我知道在 Java 9 中引入了一个新方法 orTimeOut(int) 但在 Java 8 中我们没有这样的方法。
感谢任何帮助!
提前致谢。
【问题讨论】: