【发布时间】:2016-12-30 22:56:57
【问题描述】:
我正在阅读 scala.concurrent.impl.Promise 并且对“将 DefaultPromise 与另一个链接”的概念感到困惑。我了解“防止内存泄漏”部分,但不知道如何编写DefaultPromise 的当前状态为DefaultPromise 的示例。
当DefaultPromise 首次创建时,它的状态是Nil,并且随着我们不断向其附加flatMap,列表会不断增长。什么情况下是分支
case dp: DefaultPromise[_] => dp.asInstanceOf[DefaultPromise[S]].linkRootOf(p)
在Future.flatMap 中调用?
test("default promise linking") {
//f1.getState === Nil
val f1 = Future {Thread.sleep(200000); 2}
//f1.getState === List(CallbackRunner1)
f1.flatMap(x => Future {Thread.sleep(200000); 4})
//f1.getState === List(CallbackRunner2, CallbackRunner1)
f1.flatMap(y => Future {Thread.sleep(200000); 3})
Thread.sleep(30000000)
}
【问题讨论】:
-
可能是
f1.flatMap(x => f1)? -
@Bergi,但是如何理解 将承诺链接到另一个承诺,以便两个承诺共享相同的外部可见状态?
-
Future {Thread.sleep(200000); 4}返回一个DefaultPromise,对吧? -
是的,但是如何理解共享相同的外部可见状态?