2013-03-26 9 views
4

Я читал многопоточность, чтобы получить что-то большее, чем обычные «push-функции для потокового потока и ждать его завершения», который действительно является базовым.Task Scheduler (Task.Factory) и контроль количества потоков

В принципе, я хочу больше контролировать потоки, возможность передавать токены отмены, получать возвращаемые значения и т. Д. Это все возможно с использованием Task.factory (Task Scheduler), который из того, что я понимаю, запускает наверху потока.

Если это так, если я ограничу номер потока в общем потоке, который будет применяться к моей реализации Планировщика заданий или?

Я также читал, что использование вашей собственной threadpool лучше, чем the threadpool, могу ли я смешать эти два и получить контроль, который я хочу?

Любые предложения приветствуются! Спасибо, что нашли время, чтобы объяснить немного больше парней.

ответ

5

Вы можете создать TaskScheduler that limits concurrency. Затем этот пользовательский планировщик можно использовать для создания собственного TaskFactory и запускать задачи, настроенные с помощью элемента управления.

Проект Parallel Extensions Samples включает в себя множество настраиваемых планировщиков задач, которые вы можете использовать в качестве ссылки.

Я также читал, что использование вашей собственной threadpool лучше, чем The threadpool, могу ли я смешать эти два и получить контроль, который я хочу?

Я бы не согласился с этим, для большинства общих целей. .NET ThreadPool очень эффективен и сильно оптимизирован. Он включает в себя довольно много показателей для автоматического масштабирования количества используемых нитей и т. Д.

Как вы уже сказали, вы всегда можете сделать TaskScheduler, который использует выделенные потоки или собственную реализацию «пула потоков», если вы выберете.

+0

Что я хочу - у меня есть функция: int Calc (int 1, int 2) - и я хочу сделать это 100 раз, с максимальным количеством потоков 10 и сохранить результаты на экране, а также кнопку отмены в Я хочу отменить все это - нет ли более простого подхода? – Darko

+2

@ Darko Используйте 'Parallel.For' с набором' ParallelOptions'. См. Http://reedcopsey.com/series/parallelism-in-net4/ –