簡體   English   中英

表現奇特的Groovy演員

[英]Groovy Actor Behaving Strange

我有這段代碼:

class GitDownloader extends DefaultActor {

    private String dir

    @Override
    protected void act() {
        loop {
            react {
                repos -> if (repos instanceof String[])
                    println "Total Repos: ${repos.size()}"
                    repos.each {
                        repo ->
                            "git clone ssh://git@bar-src.foo.com/${repo} ${dir}/${repo.split("/").last()}".execute()
                    }
            }
        }
    }
}

我是這樣開始的:

def gitDownloader = new GitDownloader(dir: sourceCodeFolder)
gitDownloader.start()
gitDownloader << repositories

問題在於任務以隨機順序執行。 它應該運行git clone命令的次數與repos.size()相同,但實際上不應如此。 每次運行隨機次數。

each循環應在后台作為單個任務執行,似乎git clone命令是並行執行的。

如果您要發送列表,它將被接收到一個列表...

如下代碼:

import groovyx.gpars.actor.*

class GitDownloader extends DefaultActor {

    private String dir

    @Override
    protected void act() {
        loop {
            react { repos -> 
                println "Got an ${repos.getClass()} of repos"
                repos.each {
                    repo ->
                        println "doing $repo for dir $dir"
                }
            }
        }
    }
}

def g = new GitDownloader(dir:'woo')
g.start()
g << ['a', 'b']

印刷品:

Got an class java.util.ArrayList of repos
doing a for dir woo
doing b for dir woo

這似乎按預期工作...

或將其更改為一次執行一次(添加了睡眠以模擬正在完成的某些工作)

import groovyx.gpars.actor.*

class GitDownloader extends DefaultActor {

    private String dir

    @Override
    protected void act() {
        loop {
            react { repo -> 
                println "Got an ${repo.getClass()} of repos"
                println "doing $repo for dir $dir"
                Thread.sleep(1000)
            }
        }
    }
}

def g = new GitDownloader(dir:'woo')
g.start()
g << 'a' << 'b'
g

也可以打印:

Got an class java.lang.String of repos
doing a for dir woo
Got an class java.lang.String of repos
doing b for dir woo

從您的代碼中,我看不到問題(除了String[]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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