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

Task.WhenAny for first completion in C Sharp (C#) - Cheat Sheet & Quick Revision

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

Task.WhenAny waits for any one of a set of tasks to complete and returns the first completed task.

Click to reveal answer
beginner
How do you get the result of the first completed task when using Task.WhenAny?

After Task.WhenAny returns, you can access the Result property of the returned task if it is a Task<T>.

Click to reveal answer
beginner
True or False: Task.WhenAny waits for all tasks to complete before returning.

False. Task.WhenAny returns as soon as any one task completes.

Click to reveal answer
intermediate
What type does Task.WhenAny return?

It returns a Task<Task> representing the first completed task.

Click to reveal answer
intermediate
Why might you use Task.WhenAny instead of Task.WhenAll?

You use Task.WhenAny when you want to proceed as soon as the first task finishes, instead of waiting for all tasks.

Click to reveal answer
What does Task.WhenAny return?
AA list of all task results
BAll tasks after completion
CThe last completed task
DThe first completed task
If you want to wait for all tasks to finish, which method should you use?
ATask.WhenAny
BTask.WhenAll
CTask.WaitAny
DTask.WaitAll
After Task.WhenAny completes, how do you get the result of the first finished task if it returns a value?
AUse <code>await</code> on the returned task and access <code>Result</code>
BUse <code>Task.WaitAll</code>
CUse <code>Task.Result</code> on the original tasks
DYou cannot get the result
Which of these is a valid use case for Task.WhenAny?
AStart multiple downloads and process the first one that finishes
BWait for all downloads to finish before processing
CCancel all tasks immediately
DRun tasks sequentially
What happens to the other tasks after Task.WhenAny returns?
AThey complete immediately
BThey are automatically cancelled
CThey continue running unless cancelled
DThey throw exceptions
Explain how Task.WhenAny works and when you would use it.
Think about situations where you want to proceed as soon as one task finishes.
You got /4 concepts.
    Describe the difference between Task.WhenAny and Task.WhenAll.
    Compare waiting for one task vs. waiting for all tasks.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does Task.WhenAny do in C#?
      easy
      A. It creates a new task that never completes.
      B. It waits for all tasks to complete before continuing.
      C. It cancels all running tasks immediately.
      D. It waits for the first task to complete among multiple tasks.

      Solution

      1. Step 1: Understand Task.WhenAny purpose

        Task.WhenAny waits for the first task to finish among many tasks.
      2. Step 2: Compare with other options

        Unlike Task.WhenAll, it does not wait for all tasks, nor does it cancel tasks or create infinite tasks.
      3. Final Answer:

        It waits for the first task to complete among multiple tasks. -> Option D
      4. Quick Check:

        Task.WhenAny = first task completion [OK]
      Hint: Remember: WhenAny means wait for one task only [OK]
      Common Mistakes:
      • Confusing Task.WhenAny with Task.WhenAll
      • Thinking it cancels other tasks
      • Assuming it waits for all tasks
      2. Which of the following is the correct syntax to use Task.WhenAny with two tasks task1 and task2?
      easy
      A. var first = await Task.WhenAny(task1, task2);
      B. var first = await Task.WhenAny([task1, task2]);
      C. var first = await Task.WhenAny{task1, task2};
      D. var first = await Task.WhenAny task1, task2;

      Solution

      1. Step 1: Check correct method call syntax

        Task.WhenAny accepts params array of tasks, so calling with (task1, task2) is correct.
      2. Step 2: Identify invalid syntax

        Square brackets, curly braces, or missing parentheses cause syntax errors.
      3. Final Answer:

        var first = await Task.WhenAny(task1, task2); -> Option A
      4. Quick Check:

        Correct method call uses parentheses and comma-separated tasks [OK]
      Hint: Use parentheses and commas for Task.WhenAny arguments [OK]
      Common Mistakes:
      • Using square brackets instead of parentheses
      • Using curly braces instead of parentheses
      • Omitting parentheses around arguments
      3. What will be the output of this code snippet?
      var task1 = Task.Delay(3000).ContinueWith(_ => "Task1 done");
      var task2 = Task.Delay(1000).ContinueWith(_ => "Task2 done");
      var first = await Task.WhenAny(task1, task2);
      Console.WriteLine(await first);
      medium
      A. Task2 done
      B. No output, program hangs
      C. Task1 done\nTask2 done
      D. Task1 done

      Solution

      1. Step 1: Analyze task delays

        task1 completes after 3000ms, task2 after 1000ms, so task2 finishes first.
      2. Step 2: Task.WhenAny returns first completed task

        first will be task2, so awaiting it prints "Task2 done".
      3. Final Answer:

        Task2 done -> Option A
      4. Quick Check:

        First completed task result = Task2 done [OK]
      Hint: The shortest delay task finishes first [OK]
      Common Mistakes:
      • Assuming task1 finishes first because it is listed first
      • Expecting both tasks to print
      • Thinking program hangs waiting for all tasks
      4. Identify the error in this code using Task.WhenAny:
      var task1 = Task.Delay(2000);
      var task2 = Task.Delay(1000);
      var first = Task.WhenAny(task1, task2);
      Console.WriteLine(await first.Result);
      medium
      A. Using await on first.Result causes a compile error.
      B. Task.WhenAny should be awaited before accessing Result.
      C. Task.Delay cannot be used with Task.WhenAny.
      D. Console.WriteLine cannot print task results.

      Solution

      1. Step 1: Check how Task.WhenAny is awaited

        Task.WhenAny returns a Task<Task>, so it must be awaited to get the completed task.
      2. Step 2: Identify misuse of Result property

        Accessing first.Result without awaiting first causes incorrect behavior or deadlock.
      3. Final Answer:

        Task.WhenAny should be awaited before accessing Result. -> Option B
      4. Quick Check:

        Await Task.WhenAny before accessing completed task [OK]
      Hint: Always await Task.WhenAny before using its result [OK]
      Common Mistakes:
      • Accessing Result property without await
      • Confusing Task<Task> with Task
      • Ignoring async/await pattern
      5. You have three tasks: taskA (2s delay), taskB (1s delay), and taskC (3s delay). You want to print the result of the first completed task and then cancel the other two tasks. Which code snippet correctly achieves this?
      hard
      A. var first = await Task.WhenAny(taskA, taskB, taskC); cts.Cancel(); Console.WriteLine(await first);
      B. var first = await Task.WhenAny(taskA, taskB, taskC); Console.WriteLine(await first); // No cancellation code
      C. var cts = new CancellationTokenSource(); var taskA = Task.Delay(2000, cts.Token); var taskB = Task.Delay(1000, cts.Token); var taskC = Task.Delay(3000, cts.Token); var first = await Task.WhenAny(taskA, taskB, taskC); cts.Cancel(); Console.WriteLine(await first);
      D. var first = Task.WhenAny(taskA, taskB, taskC).Result; cts.Cancel(); Console.WriteLine(first.Result);

      Solution

      1. Step 1: Use CancellationTokenSource to cancel tasks

        Create a CancellationTokenSource and pass its token to all tasks so they can be cancelled.
      2. Step 2: Await Task.WhenAny and cancel remaining tasks

        Await Task.WhenAny to get first completed task, then call cts.Cancel() to stop others, finally print the result.
      3. Final Answer:

        Use CancellationTokenSource, await Task.WhenAny, then cancel and print. -> Option C
      4. Quick Check:

        Cancel tasks after first completion using CancellationTokenSource [OK]
      Hint: Pass cancellation token to tasks and cancel after first finishes [OK]
      Common Mistakes:
      • Not passing cancellation token to tasks
      • Calling Cancel before awaiting Task.WhenAny
      • Using .Result instead of await causing deadlocks
      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