En Scala, el uso de Future
permite manejar operaciones asíncronas sin bloquear el flujo de ejecución del programa. Esto es útil para ejecutar tareas en segundo plano y continuar con el código principal, mejorando la eficiencia de aplicaciones concurrentes.
Future
es una herramienta para trabajar con operaciones que pueden completarse en un tiempo futuro. Al ejecutar un bloque de código con Future
, este se ejecuta de manera asíncrona, permitiendo que el programa siga funcionando mientras la tarea está en proceso. Al finalizar, el Future
contendrá el valor resultante o una excepción si falló la ejecución.
Para trabajar con Future
, es importante también usar ExecutionContext
, el cual define cómo y dónde se ejecutará la tarea asíncrona.
import scala.concurrent.{Future, ExecutionContext}
import scala.util.{Success, Failure}
// Definir el contexto de ejecución
implicit val ec: ExecutionContext = ExecutionContext.global
// Crear un Future que se ejecutará de manera asíncrona
val futureResult: Future[Int] = Future {
// Simular una operación de larga duración
Thread.sleep(1000)
42 // valor de retorno
}
// Manejar el resultado del Future
futureResult.onComplete {
case Success(value) => println(s"El resultado es $value")
case Failure(e) => println(s"Falló con la excepción: $e")
}
En este ejemplo, se crea un Future
que devuelve el valor 42
tras un retraso de 1 segundo, y su resultado se maneja con un onComplete
.
Puedes combinar varios Future
utilizando métodos como map
, flatMap
y for-comprehensions
.
val futureA: Future[Int] = Future { 10 }
val futureB: Future[Int] = Future { 20 }
val combined: Future[Int] = for {
a <- futureA
b <- futureB
} yield a + b
combined.onComplete {
case Success(sum) => println(s"La suma es $sum")
case Failure(e) => println(s"Falló con la excepción: $e")
}
Aunque no se recomienda, puedes esperar el resultado de un Future
bloqueando el hilo principal con Await
.
import scala.concurrent.Await
import scala.concurrent.duration._
val result = Await.result(futureResult, 2.seconds)
println(s"El resultado obtenido es: $result")
Para más información sobre el uso de Future
en Scala, consulta la documentación oficial de Scala.
Jorge García
Fullstack developer