@T.Zacks , based on my test, the code you provided will run parallel.
I make a code example and you could have a look.
Code:
var timer = new Stopwatch();
timer.Start();
Task.WaitAll(stage1, stage2);
timer.Stop();
TimeSpan timeTaken = timer.Elapsed;
string foo = "Time taken: " + timeTaken.TotalMilliseconds;
Console.WriteLine(foo);
Result:
As the above result showed, we spend about 5000 Milliseconds to complete the two tasks. The stage2 will be completed first, because it only needs 1000 Milliseconds.
Note: I can not code the first two line's code, so I make a picture about the code.
If the answer is the right solution, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.