ка паралельних завдань або Task Parallel Library (або TPL). Ця бібліотека вносить чимало змін, що стосуються паралельного програмування. Дані зміни стосуються як основ організації багатопоточності в C #, так і В«поверхневихВ» нововведень, таких як зміна або введення нових методів, які значно спрощують процес створення багатопотокового додатку. p align="justify"> Дуже важливо звернути увагу на те, що кошти, надані бібліотекою паралельних завдань, не є повним заміщенням стандартного механізму реалізації багатопоточності, а лише доповнюють його. Практично всі стандартні механізми побудови багатопотокового додатку (вони описані в роботі Пономарьова А.А) застосовні і до засобів бібліотеки TPL. br/>
.1 Основні нововведення TPL
Бібліотека TPL визначена в просторі імен System.Threading.Tasks.
Слід звернути увагу, що дуже часто в програму включають і клас System.Threading. Це обумовлено тим, що використання бібліотеки TPL для організації багатопотокової обробки є рекомендованим, але не обов'язковим. Побудова многопотчного додатки з використанням класу Thread і раніше знаходить широке застосування. Більше того, бібліотека паралельних завдань має ряд істотних недоліків, про які надалі буде розказано більш докладно. Ці недоліки можуть бути усунені стандартними методами організації багатопоточності. p align="justify"> В основу TPL покладено клас Task (визначений у просторі імен System.Threading.Tasks), і елементарна одиниця виконання инкапсулируется засобами цього класу, а не класу Thread. Одне з фундаментальних відмінностей бібліотеки паралельних завдань полягає в тому, що клас Task НЕ інкапсулює потік виконання, як це робить клас Thread. Клас Task є абстракцією, що представляє асинхронну операцію, але в деякому роді завдання сама по собі нагадує створення потоку. p align="justify"> Завдання мають над потоками дві основні переваги. По-перше, це більш масштабоване та ефективне використання системних ресурсів. У фоновому режимі завдання поміщаються в чергу ThreadPool, яка вдосконалена за допомогою спеціальних алгоритмів. Ці алгоритми (пошук екстремуму, перенесення навантаження і т.д.) визначають і налаштовують кількість потоків так, щоб найкращим способом підвищити продуктивність програми. По-друге - більший програмний контроль в порівнянні з потоком. Завдання підтримують такі API інтерфейси як очікування, скасування, продовження і багато іншого. p align="justify"> Ще однією відмінністю класу Task від класу Thread є зміна підходу до ідентифікації потоку. Якщо для класу Thread використовувалася властивість Name, доступне як для запису, так і для читання, то в класі Task це властивість відсутня. Натомість йому було додано властивість Id, що належить типу int і доступне лише для читання. Воно оголошується наступним образом.int Id {get;}
Властивість Id має ряд переваг над властивістю Name. По-перше, якщо об'єкту типу Thread не поставити вл...