我有两个外部进程要按顺序运行:
val antProc = Process(Seq(antBatch","everythingNoJunit"), new File(scriptDir))
val bossProc = Process(Seq(bossBatch,"-DcreateConnectionPools=true"))
val f: Future[Process] = Future {
println("Run ant...")
antProc.run
}
f onSuccess {
case proc => {
println("Run boss...")
bossProc.run
}
}
结果是:
Run ant...
Process finished with exit code 0
如何运行antProc直到完成,然后是bossProc?
以下方法似乎达到了目的。但是,这不是未来的方法。
antProc.!<
bossProc.!<
答案 0 :(得分:3)
你应该可以这样做:
val antProc = Process(Seq(antBatch,"everythingNoJunit"), new File(scriptDir))
val bossProc = Process(Seq(bossBatch,"-DcreateConnectionPools=true"))
val antFut: Future[Process] = Future {
antProc.run
}
val bossFut: Future[Process] = Future {
bossProc.run
}
val aggFut = for{
antRes <- antFut
bossRes <- bossFut
} yield (antRes, bossRes)
aggFut onComplete{
case tr => println(tr)
}
aggFut的结果将是一个由蚂蚁结果和boss结果组成的元组。
另外,在发生异步回调之前,请确保运行此命令的vm没有退出。如果执行上下文包含守护程序线程,则它可能在完成之前退出。
现在,如果你想让bossProc在antProc之后运行,那么代码就像这样
val antProc = Process(Seq(antBatch,"everythingNoJunit"), new File(scriptDir))
val bossProc = Process(Seq(bossBatch,"-DcreateConnectionPools=true"))
val antFut: Future[Process] = Future {
antProc.run
}
val aggFut = for{
antRes <- antFut
bossRes <- Future {bossProc.run}
} yield (antRes, bossRes)
aggFut onComplete{
case tr => println(tr)
}