阅读量:0
在Scala中,Future和Promise是用来处理异步编程的重要工具。Future代表一个异步计算的结果,而Promise用于产生这个结果。下面是一个简单的示例,演示如何使用Future和Promise进行异步编程:
import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.{Future, Promise} // 创建一个Promise对象 val promise = Promise[Int]() // 获取Promise的Future对象 val futureResult = promise.future // 在Future中定义异步计算任务 val asyncTask = Future { // 模拟一个耗时的计算任务 Thread.sleep(1000) 42 } // 将异步计算任务的结果传递给Promise asyncTask.onComplete { case scala.util.Success(result) => promise.success(result) case scala.util.Failure(ex) => promise.failure(ex) } // 在Future中处理异步计算任务的结果 futureResult.onComplete { case scala.util.Success(result) => println(s"异步计算结果为: $result") case scala.util.Failure(ex) => println(s"异步计算失败: ${ex.getMessage}") } // 阻塞等待异步计算结果 //futureResult.foreach(result => println(s"Final result: $result")) // 输出: // 异步计算结果为: 42
在这个示例中,我们首先创建了一个Promise对象,并通过其future()方法获取与此Promise相关联的Future对象。然后,我们在一个单独的Future中定义了一个模拟的异步计算任务asyncTask,当计算完成时,将结果传递给Promise对象。最后,我们在future()方法返回的Future对象上使用onComplete方法处理异步计算任务的结果。
需要注意的是,Future和Promise之间是相互关联的,Promise用于产生异步计算的结果,而Future用于表示这个结果。在实际的异步编程中,我们通常会在Future中定义异步任务,并在Promise中传递计算结果。