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

Task.WhenAll for parallel execution in C Sharp (C#) - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Task.WhenAll Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Task.WhenAll example?

Consider the following C# code using Task.WhenAll to run tasks in parallel. What will be printed to the console?

C Sharp (C#)
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var task1 = Task.Delay(100).ContinueWith(_ => 1);
        var task2 = Task.Delay(50).ContinueWith(_ => 2);
        var results = await Task.WhenAll(task1, task2);
        Console.WriteLine(string.Join(",", results));
    }
}
ARuntime exception
B2,1
CCompilation error
D1,2
Attempts:
2 left
💡 Hint

Remember that Task.WhenAll returns results in the order of the tasks passed, not the order they complete.

🧠 Conceptual
intermediate
1:30remaining
Which statement about Task.WhenAll is true?

Choose the correct statement about Task.WhenAll in C#.

AIt waits for all tasks to complete and returns their results in the order tasks were passed.
BIt returns results as soon as the first task completes.
CIt cancels all tasks if any one task fails.
DIt runs tasks sequentially, one after another.
Attempts:
2 left
💡 Hint

Think about how Task.WhenAll handles multiple tasks and their results.

🔧 Debug
advanced
2:30remaining
Why does this Task.WhenAll code throw an exception?

Examine the code below. It throws an exception at runtime. What is the cause?

C Sharp (C#)
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var task1 = Task.FromException<int>(new InvalidOperationException("Error in task1"));
        var task2 = Task.Run(() => 42);
        var results = await Task.WhenAll(task1, task2);
        Console.WriteLine(string.Join(",", results));
    }
}
AThe code has a syntax error causing compilation failure.
BTask.WhenAll returns partial results ignoring failed tasks.
CTask.WhenAll throws AggregateException because one task failed.
DTask.WhenAll cancels all tasks when one fails, so no exception is thrown.
Attempts:
2 left
💡 Hint

Think about how exceptions in tasks are handled when using Task.WhenAll.

📝 Syntax
advanced
2:00remaining
Which option correctly uses Task.WhenAll with async lambdas?

Identify the correct syntax to run two async lambdas in parallel and await their results using Task.WhenAll.

Avar results = await Task.WhenAll(Task.Run(async () => await Task.Delay(10)), Task.Run(async () => await Task.Delay(20)));
Bvar results = await Task.WhenAll(async () => await Task.Delay(10), async () => await Task.Delay(20));
Cvar results = await Task.WhenAll(() => Task.Delay(10), () => Task.Delay(20));
Dvar results = Task.WhenAll(Task.Delay(10), Task.Delay(20));
Attempts:
2 left
💡 Hint

Remember that Task.WhenAll expects tasks, not delegates or lambdas directly.

🚀 Application
expert
2:30remaining
How many items are in the results array after this Task.WhenAll call?

Given the code below, how many elements does the results array contain after Task.WhenAll completes?

C Sharp (C#)
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        Task<int> t1 = Task.FromResult(5);
        Task<int> t2 = Task.Run(() => 10);
        Task<int> t3 = Task.Delay(100).ContinueWith(_ => 15);
        var results = await Task.WhenAll(t1, t2, t3);
        Console.WriteLine(results.Length);
    }
}
A2
B3
C1
D0
Attempts:
2 left
💡 Hint

Count how many tasks are passed to Task.WhenAll.

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