Once of the Semaphore's is meant to allow at most 5 items to download files in parallel. The RateLimiter semaphore is a Mutex for the lack of a better async construct to lock the file count. There isn't a way to do what it does (increment and compare) without using a lock