首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy Actor行为怪异

Groovy Actor行为怪异
EN

Stack Overflow用户
提问于 2015-11-12 21:27:54
回答 1查看 54关注 0票数 0

我有一段代码:

代码语言:javascript
复制
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()
                    }
            }
        }
    }
}

我是这样开始的:

代码语言:javascript
复制
def gitDownloader = new GitDownloader(dir: sourceCodeFolder)
gitDownloader.start()
gitDownloader << repositories

问题是任务的执行顺序是随机的。它应该像repos.size()一样多次运行git clone命令,但它没有这样做。它每次都会随机运行一次。

这个each循环应该作为单个任务在后台执行,看起来git clone命令是并行执行的。

EN

回答 1

Stack Overflow用户

发布于 2015-11-12 23:05:48

如果你正在发送一个列表,它将是一个接收到的列表...

以下代码:

代码语言:javascript
复制
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']

打印:

代码语言:javascript
复制
Got an class java.util.ArrayList of repos
doing a for dir woo
doing b for dir woo

它看起来像预期的那样工作...

或者将其更改为一次做一个(添加了睡眠以模拟正在完成的某些工作)

代码语言:javascript
复制
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

还可以工作,并打印:

代码语言:javascript
复制
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[]之外)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33672534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档