астивість Name вручну (задається привласненням), то згодом потік залишиться неіменованого. Властивість ж Id заповнюється автоматично при створенні завдання. Присвоєння ідентифікатора завданню відбувається динамічно. Більше того, програмно неприпустимі завдання з однаковими Id, чого не можна сказати про властивість Name, де іменування різних потоків однаковими іменами припустимо. Потоки з однаковими іменами і неіменовані потоки можу створити велику плутанину при побудові багатопотокової програми. Бібліотека паралельних завдань дозволяє уникнути даних незручностей. p align="justify"> Також в клас Task було включено властивість Result. Воно необхідне для того, щоб можна було організувати повернення значення з завдання. p align="justify"> public TResult Result {get; internal set;}
Дана властивість доступно тільки для читання поза виконуваної завдання, так як аксессор set є для даної властивості внутрішнім. Такий механізм схожий на всім добре відомий механізм повернення значення з функції, і досить легко розуміємо. p align="justify"> Створення завдання і запуск задачі відбувається шляхом створення об'єкта типу Task і виклику методу Start ().
public Task (Action act); void Start ();
Параметр act - точка входу в код, який представляє задачу. Подібним же чином відбувається і створення потоку за допомогою класу Thread. Але бібліотека паралельних завдань додала декілька більш ефективних методів створення завдання. Йдеться про метод StartNew (), визначеному в класі TaskFactory.Task StartNew (Action act);
Об'єкт класу TaskFactory може бути отриманий з властивості Factory, доступного тільки для читання в класі Task. У цьому методі спочатку створюється екземпляр класу Task для дії, що визначається параметром act, а потім відразу ж здійснюється запуск завдання на виконання. Використання методу StartNew () є ефективним у тих випадках, коли завдання створюється і відразу ж запускається, адже в даній ситуації не потрібно викликати метод Start (). У TPL (так само як і в стандартних способи організації паралелізму) як завдання можна використовувати не тільки метод, але і лямбда-вираз, як окремо вирішувалося завдання. Лямбда-вирази - особливий вид анонімних функцій. Використання лямбда-виразів найбільш корисно в тих випадках, коли призначенням методу служить виконання разової задачі (оформляти дану задачу в окремий метод було б надмірною). Ще одним приємним нововведенням бібліотеки паралельних завдань є В«сімействоВ» методів очікування. Якщо в класі Thread була визначено метод Join (), що очікує завершення потоку, для якого він був викликаний, то в класі Task найпростішим методом очікування є метод Wait (). Void Wait ();
Різниці між функціями Join () і Wait () немає абсолютно ніякої (хіба що назва wait найбільш зрозуміло описує сенс функції). Але в бібліотеку паралельних завдань включені й інші методи очікування, В«род...