WhenAll() returns an awaitable Task, while Wait()/WaitAll() suspends the current thread.
as Task.WhenAll() return a Task, your sample sync code should:
Task.WhenAll(task1, task2).Wait();
a better example using WhenAll():
using System;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
Process().Wait();
}
static async Task Process()
{
var task1 = Task.Run(() =>{
for (int i = 0; i < 5; i++){
Console.WriteLine("Task 1 - iteration {0}", i);
Task.Delay(1000);
}
Console.WriteLine("Task 1 complete");
});
var task2 = Task.Run(() =>{
Console.WriteLine("Task 2 complete");
});
Console.WriteLine("Waiting for tasks to complete.");
await Task.WhenAll(task1, task2);
Console.WriteLine("Tasks Completed."); }
}
>>>>
Waiting for tasks to complete.
Task 1 - iteration 0
Task 2 complete
Task 1 - iteration 1
Task 1 - iteration 2
Task 1 - iteration 3
Task 1 - iteration 4
Task 1 complete
Tasks Completed.