So I sepnt the better part of the night trying to figure this out.
I was fortunate to get introduced to the parallel.foreach yesterday and it works like I want it t
Don't use Parralel.ForEach at all. Make your method to return Task instead of void, collect all the task and wait them like:
Parralel.ForEach
Task.WaitAll(data.Select(d => MyMethod(d, someParam)).ToArray());