Volver a la página principal
lunes 14 octubre 2024
1

Cómo trabajar con Future en Scala

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.

¿Qué es Future en Scala?

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.

Ejemplo básico de Future en Scala

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.

Otros ejemplos comunes de Future en Scala

Trabajando con múltiples Future

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")
}

Esperar el resultado de un Future

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")

Referencia oficial

Para más información sobre el uso de Future en Scala, consulta la documentación oficial de Scala.

Etiquetas:
scala
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer