You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建可外部完成的空Scala Future?

如何在Scala中创建可后续完成的Future?

Scala标准库中的Future是不可变的,一旦创建就无法直接修改它的结果,所以你没法像伪代码里那样调用future.set()来设置值。但可以通过Promise来实现类似需求——Promise相当于一个可写入的容器,它关联着一个Future,你可以在后续任意时间点通过Promise来完成这个Future。

正确实现示例

import scala.concurrent.{Future, Promise}
import scala.concurrent.ExecutionContext.Implicits.global

// 创建Promise,它关联的Future就是我们需要的"待完成"Future
val promise = Promise[Int]()
val future: Future[Int] = promise.future

// 为Future添加完成回调
future.onComplete {
  case scala.util.Failure(exception) => 
    println(s"Exception: $exception")
  case scala.util.Success(value) =>
    println(s"Done: $value")
}

// 在其他线程、任意时间点设置Future的结果
new Thread(() => {
  // 模拟异步延迟操作
  Thread.sleep(1000)
  promise.success(123) // 标记Future为成功,传入结果
  // 若要设置失败结果,可使用:promise.failure(new Exception("操作失败"))
}).start()

关键说明

  • Promise是Future的"写入端",promise.future返回对应的只读Future实例
  • 一旦调用promise.success或promise.failure完成Future后,就无法再修改结果,重复调用会抛出异常
  • 你添加的onComplete回调会在Future完成时自动触发,不管完成操作是在哪个线程执行的

内容的提问来源于stack exchange,提问作者R A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:50:02