Grails异步 - 创造承诺

时间:2013-10-22 22:13:19

标签: grails asynchronous

我正在使用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()

1 个答案:

答案 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)