Parallel.ForEach vs Task.Factory.StartNew

Qual é a diferença entre os trechos de código abaixo? Os dois não usarão threads de pool de threads?

Por exemplo, se eu quiser chamar uma função para cada item de uma coleção,

Parallel.ForEach<Item>(items, item => DoSomething(item));

vs

foreach(var item in items)
{
  Task.Factory.StartNew(() => DoSomething(item));
}

questionAnswers(4)

yourAnswerToTheQuestion