I'd rather you use a semaphore here than a Thread.Sleep