* Additionally use a SemaphoreSlim for checking queue size and waiting * Use ConcurrentQueue for most things