Yes, your solution utilizes applicative order of operations to make sure there is no race condition. It's my model example for how to write a musical chord using LAUNCH. If you do it by referencing the item directly inside the ring it will have changed in the outer (shared) scope by the time the inner script evaluates it, and hence it will appear to "skip" some items.
I was going to write a snarky response pointing out the page in the Reference Manual that explains about how to get your own variables into another thread using WITH INPUTS, but to my embarrassment there is no such page. There's a page about WITH INPUTS, but it doesn't explain that purpose for it. Mea culpa!
We're making a whole online course about it! This is the closing example of week 1 in our upcoming course of 4 weeks starting this September. Registrations (free) opens during SnapCon20!