Is there a shorter way to wait for multiple threads to finish? Maybe using ContinueWhenAll... but I don't want to run the rest of my code async.
List<object> objList = // something
List<Task> taskHandles = new List<Task>();
for(int i = 0; i < objList.Count; i++) {
taskHandles.Add(Task.Factory.StartNew(() => { Process(objList[i]); }));
}
foreach(Task t in taskHandles) { t.Wait(); }
DoSomeSync1();
..
DoSomeSync2();
..
DoSomeSync3();
..
// I could have used ContinueWhenAll(waitHandles, (antecedent) => { DoSomeSync...; });
// but I'd rather not have to do that.
// It would be nice if I could have just done:
Parallel.ForEach(objList, (obj) => { Process(obj); }).WaitAll();
// or something like that.
If you replace the for()
loop with Parallel.For()
or Parallel.ForEach()
you don't need a Task list or anything. I'm not sure why you would want a .WaitAll() after a ForEach, doesn't even seem necessary.
The Parallel loops stop when all Tasks are done.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With