У цьому випадку другий метод буде асинхронно чекати завершення завдань замість блокування. Однак використання Task має недолік. Бігти в циклі- З Parallel. ForEach існує Partitioner, який створюється, щоб не виконувати більше завдань, ніж потрібно.30 вересня 2013
Паралельний. ForEach оптимізує (може навіть не запускати нові потоки) і блокує, доки цикл не завершиться, і Task. Фабрика явно створить новий екземпляр завдання для кожного елемента та повернеться до їх завершення (асинхронні завдання).
ForEach виконується послідовно для елемента колекції. ParallelForEach запускає псевдопаралельно для елемента колекції. Foreach ==> Він виконує дії послідовно, напр. якщо процес очікує завантаження файлу з браузера, він буде чекати і не виконуватиме жодних інших дій протягом цього часу простою.
Паралелізм даних підкреслює розподілений (паралельний) характер даних, на відміну від обробки (паралелізм завдань). Більшість реальних програм знаходяться десь на континуумі між паралелізмом завдань і паралелізмом даних.
ForEach підвищує продуктивність. . NET Framework Task Parallel Library (TPL) може значно підвищити продуктивність обробки за рахунок більш ефективного використання всіх доступних ядер на головному комп’ютері. У типовій моделі виконання завдання (тобто одиниця роботи) виконується послідовно на одному ядрі ЦП.
Головна відмінність – функціональність. Паралельний. ForEach блокуватиме (за дизайном), тому не повернеться, доки не буде оброблено всі об’єкти. Ваша робота потоку пулу потоків у черзі foreach спрямовуватиме роботу на фонові потоки, а не блокуватиме.