Они делают что-то совсем другое.
Первый принимает анонимный делегат и параллельно запускает несколько потоков в этом коде для всех различных элементов.
Второй не очень полезен в этом сценарии.В двух словах, он предназначен для выполнения запроса по нескольким потокам, объединения результата и передачи его снова вызывающему потоку.Таким образом, код оператора foreach всегда остается в потоке пользовательского интерфейса.
Это имеет смысл, только если вы делаете что-то дорогое в запросе linq справа от вызова AsParallel()
, например:
var fibonacciNumbers = numbers.AsParallel().Select(n => ComputeFibonacci(n));