簡體   English   中英

在 grails 中創建並發線程/promise

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM