一次处理来自ThreadPool的10个线程

时间:2014-06-15 20:58:02

标签: c# .net multithreading

编辑:我正在寻找使用.NET 3.5中提供的解决方案。我知道这有些过时了,但我现在必须坚持下去。

我有一个ThreadPool,我用它来执行大约8个不同的任务。这些都被分为不同的类,所以不要互相干扰。我的应用程序正在处理大约1300个图像文件所有主题都排队和处理。然而,它们都同时运行 - 有时会占用所有资源或减慢一切。我想一次只运行x个排队的项目,然后等待它们完成,然后再添加x个进程。

这是图像下载/处理的地方。

namespace MyNamespace.Threads
{
    public class QueueScanImage : QueueItem
    {
        public QueueScanImage(QueueArgs arg): base(arg)
        {

        }

        public override void Process(object arg)
        {
            Uri urlNext = Args.Link;
            ServerItem server = Args.Server;
            string href = Args.Href;

            try
            {
                using (var client = new WebClient())
                {
                   //Download file
                   //Process file
                }
            }
            catch (WebException ex)
            {
                //Print error to console
            }

            base.Process(arg);
        }
    }
}

我这样称呼:

PoolManager.Enqueue(new QueueScanImage(new QueueArgs(urlNext,server,att.Value)));

最终,我想做一些像这样的伪代码:

for(int x = 0; x < #ofThreads-10; x+10)
{
   # Add first 10 queued items to process
   # Wait for all 10 processing items to finish
   # Repeat
}

任何帮助都表示赞赏,因为我不熟悉C#中的线程。

0 个答案:

没有答案