Как функционально программировать для параллельных вычислений на C#?
Возможно Вам стоит посмотреть в сторону PLINQ.
чтобы разрабатывать на C# в функциональном стиле нужно использовать immutable objects - https://habr.com/post/266873/
это не всегда оправдано, т.к. требует больше ресурсов, но позволяет избегать сложных багов с разделяемыми объектами