【发布时间】:2016-04-13 13:10:02
【问题描述】:
我在 grails 控制器中有一个代码 sn-p,如下所示:
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)
当我遇到Grails Async Response Rendering 时,我意识到future1.get 和future2.get 正在阻塞调用并想让它们异步
我现在正在考虑将我的代码重构为
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 上被阻塞,以及它如何呈现正确会话的响应
【问题讨论】:
标签: grails asynchronous promise