Это зависит от того, что называется, это отдельные вопросы.
.AsParallel()
Распараллеливает перечисление , а не делегирование задач.
Parallel.ForEach
Распараллелил цикл , назначив задачи рабочим потокам для каждого элемента.
Таким образом, если перечисление вашего источника не выиграет от параллельности (например, reader.Match(file)
дорого), они равны. На ваш последний вопрос, да , оба также верны.
Кроме того, есть еще одна конструкция, на которую вы, возможно, захотите взглянуть, которая немного ее укорачивает, но при этом получает максимальный эффект от PLINQ:
GetFileList().Where(file => reader.Match(file)).ForAll(f => list.Add(f));