- 我有一个 I/O 密集型操作。
- 我只想要一次运行最多 5 个线程。
- 我有 8000 个任务要排队和完成。
- 每个任务大约需要 15-20 秒来执行。
我环顾四周 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();
我不知道为什么......我的代码一次执行超过 5 个线程。我试过 setmaxthreads、setminthreads,但它一直在执行超过 5 个线程。
怎么了?我错过了什么?我应该以另一种方式这样做吗?
谢谢