Scala未来执行



我有两个期货。我想按顺序执行它们。例如:

val ec: ExecutionContextExecutor = ExecutionContext.Implicits.global
val first=Future.successful(...)
val second=Future.successful(...)

第一次完成后,应执行第二个。问题是第二个应该返回 Future[Object]而不是 Future[Unit]我无法使用已完成的andThen等。功能我无法使用awaitThread.sleep(...)阻止该过程我无法用于循环,因为执行上下文是这样定义的。

first.flatmap( _=> second)不会按顺序执行。我该怎么做?

一旦您将Future分配给Val,该Future就会计划,并将尽快执行。为了防止这种情况,您有两个选择:

  1. def中定义Future
  2. 定义要使用的Future

这是#1的示例:

def first: Future[Int] = Future { Thread.sleep(5000); 1 }
def second(i: Int): Future[Unit] = Future { println(i) }
first.flatMap(i => second(i))

这是#2的示例:

for(
  i <- Future { Thread.sleep(5000); 1 };
  _ <- Future { println(i) }
) yield ()

两个示例将等待5秒钟,然后打印1

最新更新