Mik*_*ike 5 c# multithreading threadpool
我看了一下ThreadPool,但是
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();
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么...我的代码一次执行超过5个线程.我试过setmaxthreads,setminthreads,但它一直执行超过5个线程.
怎么了?我错过了什么?我应该以另一种方式这样做吗?
谢谢
小智 6
SetMaxThreads 有一个限制,您永远不能将其设置为低于系统上的处理器数量。如果您有 8 个处理器,将其设置为 5 与根本不调用该函数相同。
任务并行库可以帮助您:
List<task> tasks = GetTasks();
Parallel.ForEach(tasks, new ParallelOptions { MaxDegreeOfParallelism = 5 },
task => {ReportGenerator worker = new ReportGenerator(task.Code, id);
worker.Go();});
Run Code Online (Sandbox Code Playgroud)