En parallèle.ForEach() vs foreach(IEnumerable<T>.AsParallel())

Erg, j'essaie de trouver ces deux méthodes dans la BCL en utilisant un Réflecteur, mais ne peut pas les localiser. Quelle est la différence entre ces deux extraits?

Un:

IEnumerable<string> items = ...

Parallel.ForEach(items, item => {
   ...
});

B:

IEnumerable<string> items = ...

foreach (var item in items.AsParallel())
{
   ...
}

Quelles sont les différentes conséquences de l'utilisation de l'un sur l'autre? (À supposer que tout ce que je fais entre crochets dans le corps de ces deux exemples est thread-safe.)