ання завдань, заснована на ознаках скасування.
Відміна завдання, як правило, здійснюється наступним чином. Спочатку виходить ознака скасування з джерела ознак відміни, який являє собою об'єкт класу CancellationTokenSourse (визначеного в просторі імен System.Threading). Відразу необхідно зробити зауваження, що після роботи з джерелом ознак відміни слід звільнити його ресурси за допомогою методу Dispose (). Сам же ознака відміни є екземпляром класу CancellationToken (так само визначеному в просторі імен System.Threading). Далі ознака передається завданню, яка повинна контролювати його на предмет запиту на скасування. Контроль здійснюється за допомогою властивості IsCansellationRequested, доступного тільки для чтенія.bool IsCansellationRequested {get;}
Якщо дана властивість містить значення true, значить, надійшов запит відміни, інакше - ні. Якщо ж запит все-таки вступив, завдання має бути завершена. Для цього необхідно викликати метод ThrowIfCansellationRequested () для даної ознаки отмени.void ThrowIfCansellationRequested ();
Завдяки цьому в касаційному коді стає відомо, що завдання скасована. Для того щоб упевнитися, що завдання дійсно була скасована, можна використовувати властивість IsCanseled, яке повертає значення true у випадку, якщо завдання скасована. p align="justify"> Всі нововведення TPL, описані в цій частині даної роботи, застосовуються в ситуаціях, де бібліотека паралельних завдань використовується таким же чином, як і клас Thread. Але TPL має і ряд інших засобів. Мова піде про клас Parallel, який спрощує паралельне виконання коду і надає методи, раціоналізує два підходи до побудови багатопотокового додатку - паралелізм даних і паралелізм завдань. br/>
.2 Паралелізм даних
Паралелізм даних полягає в паралельній обробці деякої сукупності даних. Суть даного підходу в тому, що операція над сукупністю даних (масив, колекція і т.п.) розбивається на кілька потоків, у кожному з яких обробляється частина даних. Досить легко помітити, що даний підхід значно прискорює обробку даних, ніж послідовне взаємодія. Не можна сказати, що паралелізм даних не був можливий раніше засобами класу Thread. Можливість такої організації обробки даних була, однак вона вимагала чимало зусиль і часу. Бібліотека TPL значно спростила цей процес. p align="justify"> Паралелізм даних у бібліотеці паралельних завдань здійснюється за допомогою методів For () і ForEach (), визначених в класі Parallel.
Метод For () використовується для того, щоб розподілити на кілька процесорів (якщо така можливість є) виконання коду в циклі. Але слід бути обережним, тому що використання даного методу може як підвищити, так і знизити продуктивність програми. Пониження продуктивності буде відбуватися в тих випадках, коли буде проведена спроба розподілити дрібні цикли, або ж коли метод, виконуваний на кожному кроці циклу, т...