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ę!