我在grails控制器中有一个代码片段,如下所示:
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上被阻止,以及它如何呈现正确会话的响应
答案 0 :(得分:0)
我相信Graeme对他question的答案中的当前文档进一步澄清了这一点。 Graeme链接到类,该类准确显示结果转换器在返回Promise或PromiseMap时如何检测和处理响应。