Читаем C# 4.0 полное руководство - 2011 полностью

data[i] = data[i] / 10;

if(data[i] < 1000) data[i] = 0;

if(data[i] > 1000 & data[i] < 2000) data[i] = 100; if(data[i] > 2000 & data[i] < 3000) data[i] = 200; if(data[i] > 3000) data[i] = 300;

}

static void Main {

Console.WriteLine("Основной поток запущен."); data = new int[100000000];

// Инициализировать данные.

for(int i=0; i < data.Length; i++) data[i] = i;

// Поместить отрицательное значение в массив data, data[1000] = -10;

// Параллельный вариант инициализации массива в цикле.

ParallelLoopResult loopResult = Parallel.For(0, data.Length, MyTransform);

// Проверить, завершился ли цикл, if(!loopResult.IsCompleted)

Console.WriteLine("\пЦикл завершился преждевременно из-за того, " +

"что обнаружено отрицательное значение\п" +

"на шаге цикла номер " +

loopResult.LowestBreaklteration + ".\n");

Console.WriteLine("Основной поток завершен.");

}

}

Выполнение этой программы может привести, например, к следующему результату.

Основной поток запущен.

Цикл завершился преждевременно из-за того, что обнаружено отрицательное значение на шаге цикла номер 1000

Основной поток завершен.

Как следует из приведенного выше результата, цикл преобразования данных преждевременно завершается после 1000 шагов. Дело в том, что методBreak вызывается внутри методаMyTransform при обнаружении в массиве данных отрицательного значения.

Помимо двух описанных выше форм методаFor существует и ряд других его форм. В одних из этих форм допускается указывать различные дополнительные параметры, а в других — использовать параметры типаlongвместоintдля пошагового выполнения цикла. Имеются также формы методаFor , предоставляющие такие дополнительные преимущества, как, например, возможность указывать метод, вызываемый по завершении потока каждого цикла.

И еще одно, последнее замечание: если требуется остановить цикл, параллельно выполняемый методомFor , не обращая особого внимания на любые шаги цикла, которые еще могут быть в нем выполнены, то для этой цели лучше воспользоваться методомStop , чем методомBreak .

Применение метода ForEach

Используя методForEach, можно создать распараллеливаемый вариант циклаforeach.Существует несколько форм методаForEach . Ниже приведена простейшая форма его объявления:

public static ParallelLoopResult

ForEach(IEnumerablesource,

Actionbody)

Перейти на страницу:

Похожие книги

Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT