I am developing a module that will download pdf files to a location. For downloading i have used streams to read and write to file. initially each download would happen in a thread, so for the sake of pausing and resuming i would just pause and resume the thread. But Now the number of download thread are limited, so obviously i cannot pause a thread and hold and keep some other file download waiting. So my question here is how exactly can i do the pause and resume standing within the confines of c#.