Короткий эксперимент может проверить этот вопрос.
import concurrent._;
import concurrent.ExecutionContext.Implicits.global
import scala.concurrent.duration._
object TheFuture {
def main(args: Array[String]): Unit = {
val fut = for (v <- Future { Thread.sleep(2000) ; 10 }) yield v * 10;
println("For loop is finished...")
println(Await.ready(fut, Duration.Inf).value.get);
}
}
Если мы запустим это, мы увидим For loop is finished...
почти сразу, а затем через две секунды мы увидим результат. Таким образом, акт выполнения map
или подобных операций над будущим не блокирует.