Jak uzyskać z równoległych zadań w .NET 4.5

Chciałbym użyć iteratora .NET z równoległymi zadaniami / czekać ?. Coś takiego:

IEnumerable<TDst> Foo<TSrc, TDest>(IEnumerable<TSrc> source)
{
    Parallel.ForEach(
        source,
        s=>
        {
            // Ordering is NOT important
            // items can be yielded as soon as they are done                
            yield return ExecuteOrDownloadSomething(s);
        }
}

Niestety .NET nie obsługuje tego natywnie. Najlepsza do tej pory odpowiedź @svick - użyj AsParallel ().

BONUS: Dowolny prosty kod asynchroniczny / oczekujący, który implementuje wielu wydawców i jednego subskrybenta? Abonent zrezygnuje, a puby będą przetwarzane. (tylko podstawowe biblioteki)

questionAnswers(3)

yourAnswerToTheQuestion