WhenAll — waits for all. WhenAny — waits for first.
Task.WhenAll:
1Task<int> task1 = Task.Delay(1000).ContinueWith(_ => 1);2Task<int> task2 = Task.Delay(2000).ContinueWith(_ => 2);3Task<int> task3 = Task.Delay(500).ContinueWith(_ => 3);45// Wait for all6int[] results = await Task.WhenAll(task1, task2, task3);7// results: [1, 2, 3]
Task.WhenAny:
1Task<string> task1 = GetFromServer1Async();2Task<string> task2 = GetFromServer2Async();3Task<string> task3 = GetFromServer3Async();45// Get fastest response6Task<string> fastest = await Task.WhenAny(task1, task2, task3);7string result = await fastest;
Use cases: