Link 对另一个人的承诺
Link promise to another
我正在阅读 scala.concurrent.impl.Promise 并且对这个概念感到困惑 "link DefaultPromise with another"。我了解 'prevent memory leak' 部分,但不知道如何编写 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)
}
举个例子:
val f1 = Future {Thread.sleep(200000); 2}
val f2 = f1.flatMap(x => {
val f3 = Future {Thread.sleep(200000); 4}
f3
})
f1
和 f3
当然不会共享相同的状态 - 一个解析为 2
另一个解析为 4
。但是当 f1
完成时,处理程序 (f(v)
) 将创建 f3
并且它将匹配您感到困惑的 the case
。然后,f2
(p
in flatMap
)将链接到 f3
,以便它们共享相同的状态。
我正在阅读 scala.concurrent.impl.Promise 并且对这个概念感到困惑 "link DefaultPromise with another"。我了解 'prevent memory leak' 部分,但不知道如何编写 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)
}
举个例子:
val f1 = Future {Thread.sleep(200000); 2}
val f2 = f1.flatMap(x => {
val f3 = Future {Thread.sleep(200000); 4}
f3
})
f1
和 f3
当然不会共享相同的状态 - 一个解析为 2
另一个解析为 4
。但是当 f1
完成时,处理程序 (f(v)
) 将创建 f3
并且它将匹配您感到困惑的 the case
。然后,f2
(p
in flatMap
)将链接到 f3
,以便它们共享相同的状态。