我正在使用grails 2.3.1 - 尝试使用async features。
这是批量数据处理。我正在尝试同步2个数据库,这包括比较两个数据库并返回“增量”列表。我正在努力加快这个过程
文档说我可以向PromiseList添加一组闭包,然后调用onComplete()来检查所有闭包是否已经完成。这些是我的尝试 - 直接建立在“您也可以手动构建PromiseList”文档中:
def tasksMemberDeltas = new PromiseList()
pages.each {Integer page ->
tasksMemberDeltas << {findCreateMemberDeltas(page, (page + pageSize) - 1)}
if (page % 30 == 0) {
tasksMemberDeltas.onComplete {
tasksMemberDeltas = new PromiseList()
}
}
返回:
Error groovy.lang.MissingMethodException:
No signature of method: java.util.ArrayList.onComplete()
答案 0 :(得分:1)
最后我调用了调用waitAll的.get()。进入.get()并发现它确实等待了我的启示。
所以,如果我有一个任务我打电话:
waitAll finalDeltas
如果我有一个列表,我打电话:
taskFinalDeltas.get()
onComplete()在逻辑上与单个delta相关。不是清单。所以这个工作正常:
Promise memberDeleteDeltas = task {
findDeleteAndTagDeltas()
}
memberDeleteDeltas.onError { Throwable err ->
println "An error occured ${err.message}"
}
memberDeleteDeltas.onComplete { result ->
println "Completed create deltas"
}
waitAll(memberDeleteDeltas)