Чисто функционально, как в F#, на C# будет сложно что-то сделать, а так:
Как упоминалось - это PLINQ.
А ещё метод
Task.ContinueWith.
Обратите внимание что лучше использовать в сочетании с Task.WhenAll, тогда будет параллельность.
Не помню точно, но то ли Дж. Рихтер упоминал, то ли Ст. Клири, что Task создавали с прицелом на функциональный подход к разработке.
Ещё есть
TPL Dataflow и
Rx.NET.
Это более высокие уровни абстракции над Task.
И всё это можно объединить как
TPL.