Skip to content
Scala

Futures and Async

Asynchronous computation with Future and ExecutionContext.

By EZ4Code Team
futureasyncconcurrency

Code

import scala.concurrent.{Future, ExecutionContext}
import scala.concurrent.duration._
import ExecutionContext.Implicits.global

def fetchUser(id: Int): Future[String] = Future {
  Thread.sleep(100)
  s"user-$id"
}

// Compose futures
val future = for {
  u1 <- fetchUser(1)
  u2 <- fetchUser(2)
} yield s"$u1 and $u2"

// Callback
future.onComplete {
  case util.Success(v) => println(v)
  case util.Failure(e) => println(s"Error: $e")
}

// Block (avoid in production)
val result = scala.concurrent.Await.result(future, 5.seconds)

Explanation

Future represents an async result. Use for-comprehensions to chain futures sequentially; ExecutionContext is the thread pool. Avoid Await.result in production code — use callbacks or Akka/Pekko for streaming. Scala 3 also supports direct-style async/await.

More Scala Snippets