Я понимаю, что новая TPL (параллельная библиотека задач) реализовала Parallel.ForEach() таким образом, что она работает с "выраженным parallelism". Значит, это не гарантирует, что ваши делегаты будут работать в нескольких потоках, но скорее проверяет, имеет ли хост-платформа несколько ядер, и если это правда, только тогда она распределяет работу по ядрам (по существу 1 поток на ядро).
Если хост-система не имеет нескольких ядер (становится все сложнее и сложнее найти такой компьютер), тогда он будет запускать ваш код последовательно, как "обычный" цикл foreach. Довольно классный материал, честно говоря.
Обычно я делал бы что-то вроде следующего, чтобы поместить мою длинную операцию в фоновый поток из ThreadPool:
ThreadPool.QueueUserWorkItem(новый WaitCallback (targetMethod), новый Object2PassIn());
В ситуации, когда главный компьютер имеет только одно ядро, TPL Parallel.ForEach() автоматически помещает вызов в фоновый поток? Или, должен ли я manaully вызывать любые вызовы TPL из фона thead, чтобы, если я выполняю с одного основного компьютера, по крайней мере, эта логика будет отключена от потока диспетчеризации графического интерфейса?
Моя забота заключается в том, что если я оставлю TPL ответственным за все это, я хочу убедиться, что он определяет его как единое ядро, которое по-прежнему выводит код, который внутри цикла Parallel.ForEach() на фоновый поток, например Я бы сделал это, чтобы не блокировать мой графический интерфейс.
Спасибо за любые мысли или советы, которые у вас могут быть...