Scala未来执行

时间:2017-09-06 08:48:31

标签: multithreading scala future executioncontext

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

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

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

first.flatmap( _=> second)将无法按顺序执行。 我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

只要您将Future分配给val,就会安排Future并尽快执行。为防止这种情况,您有两种选择:

  1. Future
  2. 中定义def
  3. 定义您要使用它的Future
  4. 以下是#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个