我在閱讀scala.concurrent.impl.Promise,並被「將DefaultPromise與另一個鏈接」概念混淆。我理解'防止內存泄漏'部分,但不知道如何編寫一個示例,其中DefaultPromise
的當前狀態爲DefaultPromise
。將承諾鏈接到另一個
當第一次創建DefaultPromise
時,其狀態爲Nil
,並且該列表隨着我們繼續追加flatMap
而增加。在什麼情況下分支
case dp: DefaultPromise[_] => dp.asInstanceOf[DefaultPromise[S]].linkRootOf(p)
in Future.flatMap
called?
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
@Bergi,但如何理解**鏈接承諾到另一個,所以這兩個承諾共享相同的外部可見狀態**? –
'Future {Thread.sleep(200000); 4}'返回一個'DefaultPromise',對吧? – Bergi