xxxxxxxxxx
import scala.concurrent._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
def slowOperationFuture(name: String): Future[String] = {
Future{
Thread.sleep(1000)// do nothing for 1 second
name + " returned!"
}
}
// this will work because you are waiting enough time
Await.result(slowOperationFuture("foo"), 2.seconds)
// >>> res: String = "foo returned!"
// this will trigger an error becase you waited too little time
Await.result(slowOperationFuture("foo"), 500.milliseconds)
// java.util.concurrent.TimeoutException: Futures timed out after [500 milliseconds]
// scala.concurrent.impl.Promise$DefaultPromise.ready(Promise.scala:259)
// scala.concurrent.impl.Promise$DefaultPromise.result(Promise.scala:263)
// scala.concurrent.Await$.$anonfun$result$1(package.scala:220)
// scala.concurrent.BlockContext$DefaultBlockContext$.blockOn(BlockContext.scala:57)
// scala.concurrent.Await$.result(package.scala:146)
// ammonite.$sess.cmd66$Helper.<init>(cmd66.sc:5)
// ammonite.$sess.cmd66$.<init>(cmd66.sc:7)
// ammonite.$sess.cmd66$.<clinit>(cmd66.sc:-1)