Uses Parallel.ForEach to avoid AggregateException
refactoring to turn the grid into an immutable object