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