Я рассмотрел практичность некоторых новых параллельных функций в .NET 4.0.
Скажем, у меня такой код:
foreach (var item in myEnumerable)
myDatabase.Insert(item.ConvertToDatabase());
Представьте, что myDatabase.Insert выполняет некоторую работу для вставки в базу данных SQL.
Теоретически вы можете написать:
Parallel.ForEach(myEnumerable, item => myDatabase.Insert(item.ConvertToDatabase()));
И автоматически вы получаете код, который использует несколько ядер.
Но что, если myEnumerable может взаимодействовать только с одним потоком? Будет ли класс Parallel перечислить одним потоком и только отправить результат рабочим потокам в цикле?
Что делать, если myDatabase может взаимодействовать только с одним потоком? Разумеется, было бы не лучше сделать соединение с базой данных на итерацию цикла.
Наконец, что, если мой "элемент var" является UserControl или что-то, с чем необходимо взаимодействовать с потоком пользовательского интерфейса?
Какой шаблон проектирования следует использовать для решения этих проблем?
Мне кажется, что переключение на Parallel/PLinq/etc не так просто, когда вы имеете дело с реальными приложениями.