ривіальний. У цих випадках витрати розподілу циклу по потоках будуть перевищувати заощаджений час, і користі від такого використання багатопоточності не буде. Необхідно бути дуже обережним. p align="justify"> Існує кілька оголошень методу For ().
public static ParallelLoopResult For (int from, int to, Action act);
public static ParallelLoopResult For (int from, int to, Action act);
Першим параметром передається початковий стан змінної управління циклом. Другий параметр - значення, на одиницю більше кінцевого. Параметр act - це той метод (може бути як іменованих, так і анонімним), який буде виконуватися на кожному кроці циклу. У першому оголошенні метод act повинен приймати змінну типу int, через яку буде передаватися поточне значення змінної управління циклом. У другому випадку метод act приймає ще й змінну типу ParallelLoopState для організації переривання циклу. p align="justify"> Як видно з оголошення методу For (), даний метод повертає екземпляр об'єкта ParallelLoopResult. Для об'єктів даного типу визначені дві властивості, які доступні тільки для читання - IsCompleted і LowestBreakIteration. p align="justify"> public bool IsCompleted {get;} Nulable LowestBreakIteration {get;}
Властивість IsCompleted приймає логічне значення true в тому випадку, якщо коректно виконані всі кроки циклу. Якщо ж виконання циклу перервалося завчасно, дане властивість містить значення false. Властивість LowestBreakIteration буде містити найменше значення змінної управління циклом, якщо цикл був перерваний. p align="justify"> Передчасне завершення циклу For () здійснюється за допомогою методу Break (), визначеного для об'єкта типу ParallelLoopState, який передається другим параметром в метод act відповідного оголошення методу For (). void Break ();
Переривання корисно в тих випадках, коли проводиться пошук даних. Коли шукане значення буде знайдено, продовжувати цикл не має ніякого сенсу - отже, в цілях економії ресурсів, його можна перервати. p align="justify"> Ще слід звернути увагу на той факт, що при використанні методу For () не можна спиратися на послідовність циклу. Якщо цикл виконав 100 кроків, це не означає, що ці 100 кроків відповідають першим 100 значень змінної управління циклом. p align="justify"> Метод ForEach () дуже схожий по функціональності на метод For ().
public static ParallelLoopResult ForEach (IEnumerable data, Action act); static ParallelLoopResult ForEach (IEnumerable data, Action act);
Він так само повертає екземпляр об'єкта типу ParallelLoopResult, і даний цикл так само можна перервати за допомогою методу Break () для екземпляра об'єкту типу ParallelLoopState, який передається у функцію act другим параметром.
Першим параметром метод ForEach () приймає колекцію даних, оброблюваних в циклі, а другим - метод, що вик...