2016-12-25 6 views
-1

Есть ли способ повторного использования потоков, используемых в consecuent-вызовах Parallel.ForEach loop? Я пытаюсь сделать, потому что я понимаю, что создание потоков может быть дорогостоящим.Повторное использование Parallel.For/Foreach C#

То, что я хотел бы сделать:

var collection = CreateMyCollection() 
var pool = CreateThreadPool() 
for(int i =0 ; i<1000 ; i++) 
     Parallel.ForEach(pool, collection, (element) => Calculate(element, i)) 

Возможно ли это?

Примечания: Я не могу parallize внешней петли вместо (трудно зависимостей между «я»)

+3

Я хочу сказать, что потоки, которые используют методы 'Parallel', просто происходят из пула задач, поэтому использование задач должно по существу повторять использование тех же потоков. – Abion47

+0

Вау, я найду документацию для этого, у вас есть ссылка? –

ответ

2

Parallel.ForEach является частью TPL. По умолчанию TaskSceduler, ответственный за работу над задачами очереди на потоки, будет использовать ThreadPool.

Экземпляр класса TaskScheduler представляет собой планировщик задач. Планировщик задач гарантирует, что работа задачи в конечном итоге будет выполнена. Планировщик заданий по умолчанию основан на пуле потока NET Framework 4 , который обеспечивает кражу работы для балансировки нагрузки, поток впрыска/выхода на пенсию для максимальной пропускной способности и общего качества . Этого должно быть достаточно для большинства сценариев. Класс TaskScheduler также служит точкой расширения для всей настраиваемой логики планирования . Это включает в себя такие механизмы, как, например, как планировать выполнение задачи, а также то, как запланированные задачи должны быть подвержены отладчикам. Если вам нужна специальная функциональность, вы можете создать настраиваемый планировщик и включить его для выполнения определенных задач или запросов.

+0

Большое спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^