我正在阅读有关如何使用Spring的异步调用的页面: https://spring.io/guides/gs/async-method/
这引出了一些设计问题:
1)你是否隐藏了抽象背后的异步功能,还是直接使用它们?
2)在上面的示例链接中,如果每个Async调用都返回,则代码有一个“while循环”检查每10ms。还有其他方法可以实现这个,然后是一个持续的“while”循环吗? :)感觉效率不高......
谢谢!
答案 0 :(得分:0)
回答第2个问题:Java Future接口只有两个方法:get()
阻止异步请求直到完成; isDone()
检查结果是否准备好显示。不幸的是,他们之间没有桥梁 - 你无法收到事件或其他触发通知你,该任务已经计算完毕。
Java 8引入了名为CompletableFuture
的机制。
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html
来自docs:
可以明确完成的未来(设定其价值和 status),可以用作CompletionStage,支持依赖 完成后触发的功能和动作。
补充教程:http://www.nurkiewicz.com/2013/05/java-8-definitive-guide-to.html
答案 1 :(得分:0)
1)根据我的经验,直接使用异步功能。客户需要知道响应不是立即可用的,因此他们可以利用API等待响应。这导致......
2)轮询。不,它效率不高;但这是处理异步通信的常用方法。另一种方法是回调或基于事件的机制,但我没有看到在ReST API中实现的。