我有一段代码:
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问题是任务的执行顺序是随机的。它应该像repos.size()一样多次运行git clone命令,但它没有这样做。它每次都会随机运行一次。
这个each循环应该作为单个任务在后台执行,看起来git clone命令是并行执行的。
发布于 2015-11-12 23:05:48
如果你正在发送一个列表,它将是一个接收到的列表...
以下代码:
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[]之外)
https://stackoverflow.com/questions/33672534
复制相似问题