Perform n mongodb updates at a time using SemaphoreSlim
I see two issues with the provided code:


You are using a queue, however I only see a single call to retrieve items from the queue, when you start the application. Does this mean all the jobs are there when Run() is called?
You want to process 20 jobs at a time, but can _uploadService.Upload actually handle unlimited simultaneous requests? Or does it silently peak at something like 2 * number of cores or the size of the thread pool?