Grails异步 - 创建承诺
问题描述:
我在grails 2.3.1 - 尝试使用async features。Grails异步 - 创建承诺
这是批量数据处理。我正在尝试同步2个数据库,其中涉及比较两个数据库并返回'deltas'列表。我试图加快这个过程
该文件说,我可以只是添加一组关闭到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()
答
在我打电话。获得()的结尾它调用了WaitAll。进入.get()并发现它确实等待所有是我的启示。
所以,如果我有一个任务,我称之为:
waitAll finalDeltas
如果我有一个列表我打电话:
taskFinalDeltas.get()
的onComplete()逻辑上涉及到一个单一的增量。不是名单。所以这工作正常:
Promise memberDeleteDeltas = task {
findDeleteAndTagDeltas()
}
memberDeleteDeltas.onError { Throwable err ->
println "An error occured ${err.message}"
}
memberDeleteDeltas.onComplete { result ->
println "Completed create deltas"
}
waitAll(memberDeleteDeltas)