- 我有一个I/O密集型操作。
- 我只想要一次运行5个线程的MAX。
- 我有8000个任务要排队和完成。
- 每个任务大约需要15-20秒才能执行。
我在线程池四周看了看,但是ThreadPool挫败 - 线程创建超过SetMaxThreads
ThreadPool.SetMaxThreads(5, 0);
List<task> tasks = GetTasks();
int toProcess = tasks.Count;
ManualResetEvent resetEvent = new ManualResetEvent(false);
for (int i = 0; i < tasks.Count; i++)
{
ReportGenerator worker = new ReportGenerator(tasks[i].Code, id);
ThreadPool.QueueUserWorkItem(x =>
{
worker.Go();
if (Interlocked.Decrement(ref toProcess) == 0)
resetEvent.Set();
});
}
resetEvent.WaitOne();
我想不通为什么......我的代码是在同一时间执行超过5个线程。我试过setmaxthreads,setminthreads,但它一直执行超过5个线程。
发生了什么事?我错过了什么?我应该以另一种方式来做这件事吗?
谢谢
您已经在调试器中验证了** tasks.Count **的值吗?你有没有尝试过把“5”放进去? – 2012-07-15 02:47:03
任务数组中有〜8000个对象 – Mike 2012-07-15 02:48:00