I would like to implement a Multiple file downloading with pattern of single producer and multiple consumer.
What I have: - Code which finds new links to be downloaded in a loop - When a new link is found - it calls download function - Download function accepts source file path and destination file path and downloads the file.
What I want to do - I want to download X number of files simultaneously (I dont know total number of files) - At any times I should be able to download X files simultaneously - as soon as 1 of the X file finish downloading - the calling function should be able to add new download right away - which in turn downloading right away
EXAMPLE would be really appreciated
For this P/C problem all you need is a BlockingCollection<T>.
//shared and thread-safe
static BlockingCollection<string> queue = new BlockingCollection<string>(100);
// Producer
queue.Add(fileName); // will block when full
// Consumer
if (queue.TryTake(out fileName, timeOut)) // waits when empty
...
You'll want to fine-tune it a little with timeouts and CancellationTokens.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With