[英]Create concurrent thread/promise in grails
我的 grails 應用程序中有一個操作,我想在調用該操作時啟動一個異步方法。 我正在嘗試使用承諾來做到這一點,但似乎 task1 同步運行。 有人知道我如何讓這個 task1 異步(並發)運行在動作收集器的同時進行處理?
def collector(){
try{
Promise task1 = task {
println "task1 - starting"
console() //call another method
println "task1 - ending"
}
//do something
...
}catch(){
....
}
使用 Grails 3:
import grails.async.Promise
import static grails.async.Promises.task
Promise p = task {
// do stuff
}
p.onError { Exception err ->
log.error( "Error during task $err" )
}
p.onComplete {
log.info "Task completed"
}
異步運行代碼片段的三種方式
一個。 使用線程
def mytask={println "3.hello"}
println "1.begin"
new Thread( {
mytask();
}).start()
println "2.end"
輸出:
1.開始
2.結束
3.你好
乙。 使用事件
import grails.events.Events
@Consumer
class Game implements Events{
@Selector("play")
def doPlay(Object msg) {
println msg.toString()
}
}
def gameScenarioService
//send event, will call doPlay method asyncrhonously
notify ( "play", "First Play" )
C. 使用GPars
@Grab(group='org.codehaus.gpars', module='gpars', version='1.2.1')
import groovyx.gpars.actor.DefaultActor
class CustomActor extends DefaultActor {
@Override protected void act() {
loop {
react {
println it
}
}
}
}
println "begin"
def console=new CustomActor()
console.start()
//trigger to react
console.send('Message')
println "end"
sleep(100) {
// wait Message
}
輸出:
開始
結尾
信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.