I understand that turning on concurrency in a For Each loop can greatly improve performance.
What I'm missing is how are variables kept scoped within each concurrent thread?
Below I have an example of three variables that are set during a For Next loop
* ScanOpEmail -- whose value is set based on some values in the current item()
* NextStepName -- whose value is set based on the Item's Current Step and category value
* cntComplete -- which increments by 1 for each item whose Current Step is "Completed"

Here's what I'm experiencing when I turn on Concurrency and leave degree of parallelism at the default of 20:
Record 1 hits Thread 1 sets variables (ScanOpEmail, Next Step, cntComplete).
Meanwhile Thread 2 kicks off and populates those *same* variables based on Record 2's information.
And so forth until we have 20 threads going.
By the time Record 1 hits the Email command, the variables have been overwritten with data from other records,
And this happens for every single record processed.
I've gotta be missing something here -- what good is concurrency if you can't scope variables within each instance and they're constantly overwriting each other?
Is there a way to scope variables to a specific parallel thread so variables aren't overwritten when concurrency is turned on?
So that while a thread is processing Record 1 the variables variables (ScanOpEmail, Next Step, cntComplete) retain their value during the life of that loop. (Then there's the issue of cntComplete.... but I could punt that if I could scope the variables on a per-thread basis.)
What am I missing here -- is anyone using For Each / Concurrency on successfully?