**** Чтобы ограничить поток: ****Я работаю над выполнением очереди заданий. Использование TPL для одного и того же. Попытка ограничить количество заданий за раз с помощью ThreadPool.SetMaxThreads. не повезло
int workerThreads, completionPortThreads;
ThreadPool.GetMaxThreads(out workerThreads, out completionPortThreads);
workerThreads = 2;
ThreadPool.SetMaxThreads(workerThreads, completionPortThreads);
Для выполнения задания я попытался 2 варианта Вариант 1.
ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc),task);
Вариант 2:
Task runner = new Task(() => taskProcessor.ImportIntoArt(task),TaskCreationOptions.LongRunning|TaskCreationOptions.PreferFairness);
runner.Start();
Я ожидаю, что этот код должен забрать первые два задания для обработки, а третий должен войти в очередь. Как и ожидалось, начнутся первые две вакансии, однако третий будет также выбран для обработки.
Любая помощь очень ценится.
Сколько у вас процессоров? Как [docs] (https://msdn.microsoft.com/en-us/library/system.threading.threadpool.setmaxthreads (v = vs.110) .aspx) говорят: «Вы не можете установить максимальное количество работников потоки или потоки завершения ввода-вывода на число, меньшее, чем количество процессоров на компьютере ». а также «Кроме того, вы не можете установить максимальное количество рабочих потоков или потоков завершения ввода-вывода на число, меньшее, чем соответствующее минимальное количество рабочих потоков или потоков завершения ввода-вывода. Чтобы определить минимальный размер пула потоков, вызовите GetMinThreads ". – stuartd
@stuartd, предполагая, что ваше предположение верно относительно количества процессоров, этот комментарий заслуживает ответа. Я бы поднял его. – adv12
есть ли другой способ сделать это с помощью TPL? – Channa