Thanks Sami Mejri for your response and I am glad you find it helpful. As a short response the main difference between Task.WaitAll and Task.WhenAll is that WaitAll blocks the current thread until all other tasks have completed, while WhenAll creates a task that completes when all the other tasks have completed without blocking the thread.