Asynchroniczne IO w Scali z kontraktami terminowymi

Powiedzmy, że otrzymuję (potencjalnie dużą) listę obrazów do pobrania z niektórych adresów URL. Używam Scali, więc chciałbym:

import scala.actors.Futures._

// Retrieve URLs from somewhere
val urls: List[String] = ...

// Download image (blocking operation)
val fimages: List[Future[...]] = urls.map (url => future { download url })

// Do something (display) when complete
fimages.foreach (_.foreach (display _))

Jestem trochę nowy w Scali, więc to wciąż wygląda dla mnie trochę jak magia:

Czy to jest właściwy sposób? Jakieś alternatywy, jeśli nie?Jeśli mam 100 zdjęć do pobrania, czy spowoduje to utworzenie 100 wątków naraz, czy będzie korzystać z puli wątków?Czy ostatnia instrukcja (display _) być wykonywane w głównym wątku, a jeśli nie, jak mogę się upewnić, że tak jest?

Dzięki za radę!

questionAnswers(3)

yourAnswerToTheQuestion