gpt4 book ai didi

scala - 在 Scala 中,为什么没有 `Future.onComplete` 的实现?

转载 作者:行者123 更新时间:2023-12-01 09:04:17 28 4
gpt4 key购买 nike

source code Future 模块,我看到 onComplete 的定义是这样的:

  /** When this future is completed, either through an exception, or a value,
* apply the provided function.
*
* If the future has already been completed,
* this will either be applied immediately or be scheduled asynchronously.
*
* $multipleCallbacks
* $callbackInContext
*/
def onComplete[U](@deprecatedName('func) f: Try[T] => U)(implicit executor: ExecutionContext): Unit

这看起来很奇怪,因为它没有函数体(没有实现)。那么为什么 onComplete 可以工作呢?它是用Java实现的吗?如何找到真正的实现代码?

最佳答案

再深入一点。您通常如何创建 Future?一种方法是 Future.apply

What does it do?

 def apply[T](body: =>T)(implicit @deprecatedName('execctx) executor: ExecutionContext): Future[T] = impl.Future(body)

impl.Future.apply创建一个包含 PromisePromiseCompletingRunnable

  def apply[T](body: =>T)(implicit executor: ExecutionContext): scala.concurrent.Future[T] = {
val runnable = new PromiseCompletingRunnable(body)
executor.prepare.execute(runnable)
runnable.promise.future
}

特别是,它创建了一个 Promise.DefaultPromisewhich implements onComplete .在同一个源文件中,您还可以看到默认的 Promise 实现也是一个 Future。当我们调用 promise.future 时,它只是将自身作为 Future 返回。所以它都在标准库中。

如果你要 search the Scala repository for "def onComplete" ,您只会得到一些结果,因此很容易找到。

关于scala - 在 Scala 中,为什么没有 `Future.onComplete` 的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30204296/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com