如何创建可外部完成的空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
相关产品推荐
相关产品推荐

