Use SemaphoreSlim