List<T>.ForEachwill go in the same order as a regular loop foreach, which is also the natural order of the list.
Yes, the documentation does not state this, but this is obvious behavior, and I think it’s pretty reasonable to rely on what doesn’t change.
( Parallel.ForEach - , .)