GParse调用BackendService异步

时间:2017-03-08 13:50:47

标签: groovy concurrency parallel-processing pool gpars

我试图在后端调用中实现异步,我一直在阅读,似乎GParse是一个很好的库来实现这一点,但我不清楚我怎么能以正确的方式实现这一点。谁能帮我?这是我的例子:

    def itemsResults
    def locationResults
    def itemsNearLocation
    GParsPool.withPool {
        itemsResults = {searchMyItems()}.async().call()
        locationResults = {getLocations()}.async().call()
        itemsNearLocation = {getItemsNear(locationResults)}.async().call() // i need locationresults answer in order to call this service

    }
    model.putAll(["items": itemsResults, 
                  "itemsNearLocation":itemsNearLocation])

    return "myView"

所以,我需要调用2 apis调用然后在第三个调用中我需要使用之前称为async的响应之一,最后将其添加到我的模型中。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

你可以使用GPars数据流......我认为这样的事情应该有效(尽管没试过):

import groovyx.gpars.dataflow.Dataflows
import static groovyx.gpars.dataflow.Dataflow.task

final def df = new Dataflows()

task {
    df.itemsResults = searchMyItems()
}

task {
    df.locationResults = getLocations()
}

task {
    df.itemsNearLocation = getItemsNear(df.locationResults)
}

def lastTask = task {
    model.putAll(["items": df.itemsResults, 
                  "itemsNearLocation":df.itemsNearLocation])
}

lastTask.join()