Разочарования ThreadPool -Создание потока превышает SetMaxThreads

  • У меня интенсивная операция ввода-вывода.
  • Я хочу, чтобы МАКСИМАЛЬНО 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 потоков одновременно. Я пытался установить maxthreads, setminthreads, но он продолжает выполнять более 5 потоков.

Что происходит? Что мне не хватает? Должен ли я делать это по-другому?

Спасибо

5
задан Mike 15 July 2012 в 02:41
поделиться