The Parallel Programming with .NET (pfxteam) has published a list of issues why a concurrent program may not achieve a parallel speedup that you would expect. * Amount of Parallelizable CPU-Bound Work * Task Granularity * Load Balancing * Memory Allocations and Garbage Collection * False Cache-Line Sharing * Locality Issues Read the full post here