【发布时间】:2015-06-05 21:17:05
【问题描述】:
我使用支持并发操作https://github.com/sksamuel/scrimage的图像库有这样的理解:
for (
file <- myDirectory.listFiles;
image <- AsyncImage(file);
scaled <- image.scale(0.5)
// possibly more ops here?
)
{
scaled.writer(Format.PNG).write(new File(dirOutput + file.getName))
}
这是write()的定义:
def write(out: OutputStream)(implicit executionContext: ExecutionContext): Future[Unit] = Future {
writer.write(out)
}
我想要做的是等到我目录中的所有图像在我的程序关闭之前完成调整大小。从我从 SO 上的其他帖子中收集到的内容基本上是将所有这些 Futures 填充到 Futures 列表中,并使用Await 来完成...有人可以帮我吗?
【问题讨论】:
-
我最初的想法是对图像总数使用倒计时锁存器并用它来阻塞主线程,但我认为这不符合 Scala Futures 的思维方式
-
您在寻找
Future.sequence吗? Future.sequence -
@jilen 可能 .. 我玩累了,但不能让它工作,也许你可以在这里告诉我如何使用它?
-
val futs = for {xxxx} yield {scaled.writer()....} ; Future.sequence(futs),这样的东西会起作用。你好像不是yield这里的未来 -
我试过了,发现 [error] : scala.concurrent.Future[scala.concurrent.Future[Unit]] [error] required: scala.collection.GenTraversableOnce[?] [error] image