在Grails2.3中运行异步的东西
在我的Grails服务中,有一部分方法我希望异步运行 下面是2.3.x的文档 我知道 但是,我希望在没有任何阻塞的情况下执行我的。在Grails2.3中运行异步的东西,grails,asynchronous,Grails,Asynchronous,在我的Grails服务中,有一部分方法我希望异步运行 下面是2.3.x的文档 我知道 但是,我希望在没有任何阻塞的情况下执行我的。p.get()方法块。我如何在没有任何阻碍的情况下履行承诺。我不在乎myMethod()是否返回,这是一种火与忘的方法 因此,如果您不调用.get()或.waitAll()而只是使用onComplete就可以运行任务而不阻塞当前线程 这是一个非常愚蠢的例子,我在控制台中使用它作为概念证明 import static grails.async.Promises.* de
p.get()
方法块。我如何在没有任何阻碍的情况下履行承诺。我不在乎myMethod()
是否返回,这是一种火与忘的方法 因此,如果您不调用.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.'
运行上述示例可获得以下输出:
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
我不能让它工作。当我定义onError时,我总是得到以下异常。org.grails.async.factory.gpars.LoggingPoolFactory错误异步执行错误:null java.lang.NullPointerException位于org.grails.async.factory.gpars.GparsPromise$\u onError\u closure2.doCall(GparsPromise.groovy:72)位于groovyx.gpars.dataflow.DataCallback$1.run(DataCallback.java:62)位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)在java.lang.Thread.run(Thread.java:745)@wheels53找到这个NPE的解决方案了吗?。我在定义onError时也得到了同样的结果
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