编辑:我正在寻找使用.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#中的线程。