在Grails 2.3中运行异步

Mor*_*ive 13 grails asynchronous

在My Grails服务中,我希望异步运行一个方法的一部分.

以下是2.3.x的文档 http://grails.org/doc/2.3.0.M1/guide/async.html

我做

public class MyService {
    public void myMethod() {
        Promise p = task {
            // Long running task
        }
        p.onError { Throwable err ->
            println "An error occured ${err.message}"
        }
        p.onComplete { result ->
            println "Promise returned $result"
        }
        // block until result is called
        def result = p.get()
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我想执行我的没有任何阻止.的p.get()方法块.如何在没有任何阻塞的情况下执行promise.如果myMethod()回归我不在乎,这是一种火与忘记的方法.

Jos*_*ore 16

所以,根据文档,如果你不打电话,.get()或者.waitAll()只是使用onComplete你,你可以运行你的任务,而不会阻止当前的线程.

这是一个非常愚蠢的例子,我在控制台中作为概念证明.

import static grails.async.Promises.*
def p = task {
    // Long running task
    println 'Off to do something now ...'
    Thread.sleep(5000)
    println '... that took 5 seconds'
    return 'the result'
}

p.onError { Throwable err ->
    println "An error occured ${err.message}"
}
p.onComplete { result ->
    println "Promise returned $result"
}

println 'Just to show some output, and prove the task is running in the background.'
Run Code Online (Sandbox Code Playgroud)

运行上面的示例为您提供以下输出:

Off to do something now ...  
Just to show some output, and prove the task is running in the background.  
... that took 5 seconds   
Promise returned the result
Run Code Online (Sandbox Code Playgroud)