用有限的计数在多个线程上运行一个函数

本文关键字:运行 函数 一个 线程 | 更新日期: 2023-09-27 18:05:35

假设我有一个列表,其中包含我想要下载的文件列表和一个函数,该函数获取文件URL名称并下载它。我想下载最多4个并行下载。我知道我可以使用一个完美的解决方案:

        Parallel.ForEach
        (
        Result,
        new ParallelOptions { MaxDegreeOfParallelism = 4 },                
        file => DownloadSingleFile(file)
        );

但是如果我们不想用这种方法,你有什么建议吗?你的想法中最好的是什么?

谢谢。

用有限的计数在多个线程上运行一个函数

像这样的老式Thread怎么样:

for(int i = 0; i < numThreads; i++)
{
    Thread t = new Thread(()=>
    {
        try
        {
            while(working)
            {
                file = DownloadSingleFile(blockingFileQueue.Dequeue());
            }
        }
        catch(InterruptException)
        {
            // eat the exception and exit the thread
        }
    });
    t.IsBackground = true;
    t.Start();
}

我们可以启动4个线程或者使用ThreadPool来添加4个工作项