Added SemaphoreSlim to limit to 4 threads