我在grails Controller 中有一个代码段,如下所示:
Future<Map<String,Object>> future1 = service.getMetrics(args1)
Future<Map<String,Object>> future2 = service.getMetrics(args2)
Map<String,Object> result1 = future1.get(10, TimeUnit.DAYS.MINUTES)
Map<String,Object> result2 = future2.get(10, TimeUnit.DAYS.MINUTES)
render([
data1: result1,
data2: result2
] as JSON)
我意识到
future1.get
和future2.get
阻止了调用,当我遇到Grails Async Response Rendering时想使它们异步我现在正在考虑将我的代码重构为
task {
Future<Map<String,Object>> future1 = service.getMetrics(args1)
Future<Map<String,Object>> future2 = service.getMetrics(args2)
Map<String,Object> result1 = future1.get(10, TimeUnit.DAYS.MINUTES)
Map<String,Object> result2 = future2.get(10, TimeUnit.DAYS.MINUTES)
render([
data1: result1,
data2: result2
] as JSON)
}
这可行,但我想了解任务的工作原理以及如何确保当前线程在future.get上不会被阻塞,以及它如何呈现正确 session 的响应
最佳答案
我相信Graeme在回答question时比当前文档更进一步阐明了这一点。 Graeme链接到该类,该类确切显示了返回Promise或PromiseMap时结果转换器如何检测和处理响应。
关于grails - Grails异步响应呈现如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34684038/