Czekanie w wątku to po prostu oddanie czasu procesora do kernela, chyba że to spin lock wtedy cały czas thread chodzi na full obrotach.
Nie ma co się za dużo zastanawiać, pobierz listę plików, potem zrób generator adres/+ nazwa pliku.
Później jakieś testy typu pojedynczy async connection, czy jeden thread i w for pobierasz te pliki z serwera, patrzysz jak to chodzi.
Później testujesz jakieś gather po 10 async połączeń lub poole threadów.
Serwer jak jest typu nginx to on tam może wykonać pobranie z dysku pliku, kompresję i umieszczenie w ramie, cache dla przyszłych połączeń, żeby z dysku nie zasysać.
Pobieranie po jednym pliku tak robi np. android sklep, gdyż jeśli serwer udostępnia upload o większym speedzie niż download użytkownika to i tak może wysaturować mu cały dostępny download i pobierać plik z maksymalną dostępną prędkością jaką mu tam dostawca oferuje, wtedy jak dwa pobiera pliki na raz to po prostu każdy pobiera połową prędkości, to na to samo wychodzi.
Jedynie jeśli pliki są bardzo małe czyli jak robisz gole http requesty to wtedy raczej lepiej wiele asynchronicznych połączeń robić, bo i tak nigdy nie wysaturujesz całej prędkości internetu.
Sam nie wiem, lepszego sposobu niż sprawdzenie różnych przypadków chyba nie będzie.