I just wondered why, unlike Scala, F# or Haskell, the basic .NET framework (as available in C# or VB) seems to have very little native support for higher level concurrency patterns.
There are basic mechanisms available - locks, monitors, the thread pool - but what about
- Synchronized variables (
MVar
) - Synchronous channels
- Asynchronous channels (see Go or Haskell)
- Actors / message passing (Erlang-Style)
- Futures
- Parallel computations/List functions
- Composable asynchronous computations through Linq (like F#'s
async {}
)
or even software transactional memory (STM for Haskell)
And even taken account of ParallelFX, this list is only partially covered.
Are there certain deeper reasons against providing such functionalities (and instead wanting people to mess around with IAsyncResult
's) or is this planned to be integrated in future?