Bird
Raised Fist0
C Sharp (C#)programming~5 mins

Task.WhenAll for parallel execution in C Sharp (C#) - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does Task.WhenAll do in C#?

Task.WhenAll waits for multiple tasks to complete in parallel and returns a single task that finishes when all the given tasks are done.

Click to reveal answer
beginner
How do you use Task.WhenAll to run two tasks at the same time?

You create two tasks and pass them to Task.WhenAll. It runs both tasks in parallel and waits for both to finish.

var task1 = Task.Run(() => DoWork1());
var task2 = Task.Run(() => DoWork2());
await Task.WhenAll(task1, task2);
Click to reveal answer
intermediate
What type does Task.WhenAll return when given tasks with results?

When given tasks that return results (like Task<int>), Task.WhenAll returns a Task<T[]> where T[] is an array of all results.

Click to reveal answer
intermediate
What happens if one of the tasks passed to Task.WhenAll throws an exception?

Task.WhenAll will complete with an exception. The exception contains all exceptions from the tasks that failed.

Click to reveal answer
beginner
Why use Task.WhenAll instead of awaiting tasks one by one?

Using Task.WhenAll runs tasks in parallel, saving time. Awaiting tasks one by one runs them sequentially, which is slower.

Click to reveal answer
What does Task.WhenAll return when given multiple Task objects?
AAn array of tasks
BThe result of the first task that finishes
CA single <code>Task</code> that completes when all tasks finish
DA boolean indicating if all tasks succeeded
If you want to get results from multiple Task<int> tasks, what type does Task.WhenAll return?
A<code>Task&lt;int&gt;</code>
B<code>Task&lt;int[]&gt;</code>
C<code>int[]</code>
D<code>Task</code>
What happens if one task throws an exception when using Task.WhenAll?
AThe returned task completes with an exception containing all errors
BThe exception is ignored
COnly the first exception is thrown immediately
DThe program crashes
Why is Task.WhenAll better than awaiting tasks one after another?
AIt runs tasks in parallel, saving time
BIt runs tasks sequentially, which is faster
CIt only runs the first task
DIt cancels all tasks automatically
Which of these is a correct way to use Task.WhenAll?
Aawait task1; await task2;
BTask.WhenAll(task1, task2);
CTask.WaitAll(task1, task2);
Dawait Task.WhenAll(task1, task2);
Explain how Task.WhenAll helps run multiple tasks in parallel and why this is useful.
Think about waiting for many things to finish together instead of one after another.
You got /3 concepts.
    Describe what happens when one or more tasks fail while using Task.WhenAll.
    Consider how errors from multiple sources are reported together.
    You got /3 concepts.

      Practice

      (1/5)
      1.

      What does Task.WhenAll do in C#?

      easy
      A. Runs multiple tasks at the same time and waits for all to finish
      B. Runs tasks one after another in sequence
      C. Cancels all running tasks immediately
      D. Runs only the first task and ignores others

      Solution

      1. Step 1: Understand Task.WhenAll purpose

        Task.WhenAll is designed to run multiple tasks in parallel and wait until all complete.
      2. Step 2: Compare options with behavior

        Only Runs multiple tasks at the same time and waits for all to finish correctly describes running tasks simultaneously and waiting for all to finish.
      3. Final Answer:

        Runs multiple tasks at the same time and waits for all to finish -> Option A
      4. Quick Check:

        Task.WhenAll = parallel run and wait [OK]
      Hint: Think: all tasks run together and wait for all done [OK]
      Common Mistakes:
      • Thinking tasks run one by one
      • Believing it cancels tasks
      • Assuming it runs only one task
      2.

      Which of the following is the correct syntax to wait for multiple tasks task1 and task2 to complete using Task.WhenAll?

      ?
      easy
      A. await Task.WhenAll{task1, task2};
      B. await Task.WhenAll(task1, task2);
      C. await Task.WhenAll[task1, task2];
      D. await Task.WhenAll();

      Solution

      1. Step 1: Recall Task.WhenAll syntax

        Task.WhenAll takes tasks as parameters inside parentheses and returns a Task to await.
      2. Step 2: Check each option's syntax

        Only await Task.WhenAll(task1, task2); uses parentheses correctly and awaits the combined task.
      3. Final Answer:

        await Task.WhenAll(task1, task2); -> Option B
      4. Quick Check:

        Correct syntax uses parentheses () [OK]
      Hint: Use parentheses () to pass tasks to WhenAll [OK]
      Common Mistakes:
      • Using square brackets [] instead of parentheses
      • Using curly braces {} incorrectly
      • Using angle brackets <> wrongly
      3.

      What will be the output of this C# code?

      using System;
      using System.Threading.Tasks;
      
      class Program {
          static async Task Main() {
              Task<int> t1 = Task.FromResult(5);
              Task<int> t2 = Task.FromResult(10);
              int[] results = await Task.WhenAll(t1, t2);
              Console.WriteLine(string.Join(",", results));
          }
      }
      medium
      A. Compilation error
      B. 10,5
      C. 5,10
      D. Task[]

      Solution

      1. Step 1: Understand Task.FromResult and Task.WhenAll

        Task.FromResult creates completed tasks with values 5 and 10. Task.WhenAll waits and returns results as an int array.
      2. Step 2: Check output of Console.WriteLine

        Results array contains [5, 10], so joining with comma prints "5,10".
      3. Final Answer:

        5,10 -> Option C
      4. Quick Check:

        Task.WhenAll returns array of results [OK]
      Hint: Task.WhenAll returns array of results in order [OK]
      Common Mistakes:
      • Assuming results are reversed
      • Expecting a string instead of array
      • Thinking code causes error
      4.

      Identify the error in this code snippet using Task.WhenAll:

      async Task RunTasks() {
          var t1 = Task.Delay(1000);
          var t2 = Task.Delay(2000);
          Task.WhenAll(t1, t2);
          Console.WriteLine("Done");
      }
      medium
      A. Missing await before Task.WhenAll, so tasks run but not waited
      B. Task.Delay cannot be used with Task.WhenAll
      C. Console.WriteLine should be inside Task.WhenAll
      D. Task.WhenAll requires a list, not separate tasks

      Solution

      1. Step 1: Check usage of Task.WhenAll

        Task.WhenAll returns a Task that must be awaited to wait for all tasks to finish.
      2. Step 2: Identify missing await

        Code calls Task.WhenAll but does not await it, so "Done" prints immediately before delays finish.
      3. Final Answer:

        Missing await before Task.WhenAll, so tasks run but not waited -> Option A
      4. Quick Check:

        Always await Task.WhenAll to wait [OK]
      Hint: Always await Task.WhenAll to wait for tasks [OK]
      Common Mistakes:
      • Not awaiting Task.WhenAll
      • Thinking Task.Delay can't be used
      • Misplacing Console.WriteLine
      5.

      You want to run three tasks that return strings: Task<string> t1, t2, and t3. You want to get all results as a list of strings after all finish. Which code correctly does this?

      hard
      A. var list = await Task.WhenAll(new List { t1, t2, t3 });
      B. var list = await Task.WhenAll(t1, t2, t3).ToList();
      C. var list = Task.WhenAll(t1, t2, t3).Result.ToList();
      D. var results = await Task.WhenAll(t1, t2, t3); var list = results.ToList();

      Solution

      1. Step 1: Understand Task.WhenAll return type

        Task.WhenAll returns a string array when awaited on Task<string> tasks.
      2. Step 2: Convert array to list correctly

        var results = await Task.WhenAll(t1, t2, t3); var list = results.ToList(); awaits Task.WhenAll, then converts the array to a list using ToList(), which is correct.
      3. Final Answer:

        var results = await Task.WhenAll(t1, t2, t3); var list = results.ToList(); -> Option D
      4. Quick Check:

        Await Task.WhenAll then convert array to list [OK]
      Hint: Await Task.WhenAll first, then convert results to list [OK]
      Common Mistakes:
      • Trying to call ToList() before awaiting
      • Using .Result causing blocking
      • Passing list directly without awaiting
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard