val ec: ExecutionContextExecutor = ExecutionContext.Implicits.global
val first=Future.successful(...)
val second=Future.successful(...)
第一次完成后应执行第二次。问题是第二个应该返回Future[Object]
而不是Future[Unit]
我无法使用已完成的andThen
等函数
我无法使用await
或Thread.sleep(...)
阻止该过程
我不能使用for循环,因为执行上下文是这样定义的。
first.flatmap( _=> second)
将无法按顺序执行。
我怎么能这样做?
答案 0 :(得分:0)
只要您将Future
分配给val,就会安排Future
并尽快执行。为防止这种情况,您有两种选择:
Future
def
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个