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

Task and Task of T types in C Sharp (C#) - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Task Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of a simple Task returning a string
What is the output of this C# program when run?
C Sharp (C#)
using System;
using System.Threading.Tasks;

class Program {
    static async Task Main() {
        Task<string> task = Task.FromResult("Hello World");
        string result = await task;
        Console.WriteLine(result);
    }
}
AHello World
BTask`1
CSystem.Threading.Tasks.Task
DCompilation error
Attempts:
2 left
💡 Hint
Remember that Task.FromResult creates a completed Task with the given result.
❓ Predict Output
intermediate
2:00remaining
Value of Task after delay
What will be the output of this program?
C Sharp (C#)
using System;
using System.Threading.Tasks;

class Program {
    static async Task Main() {
        Task<int> task = GetNumberAsync();
        int value = await task;
        Console.WriteLine(value);
    }

    static async Task<int> GetNumberAsync() {
        await Task.Delay(100);
        return 42;
    }
}
ATask`1
B0
C42
DRuntime exception
Attempts:
2 left
💡 Hint
The method returns 42 after a short delay.
❓ Predict Output
advanced
2:00remaining
What happens when awaiting a non-generic Task?
Consider this code snippet. What is printed when it runs?
C Sharp (C#)
using System;
using System.Threading.Tasks;

class Program {
    static async Task Main() {
        Task task = Task.Delay(50);
        await task;
        Console.WriteLine("Done");
    }
}
ADone
BTask
CCompilation error
DRuntime exception
Attempts:
2 left
💡 Hint
Awaiting a Task waits for its completion but returns no value.
🧠 Conceptual
advanced
2:00remaining
Difference between Task and Task
Which statement correctly describes the difference between Task and Task in C#?
ATask<T> is used only for synchronous operations, Task only for asynchronous.
BTask represents an operation that returns no value, while Task<T> represents an operation that returns a value of type T.
CTask<T> can only be awaited, Task cannot be awaited.
DTask and Task<T> are identical and interchangeable.
Attempts:
2 left
💡 Hint
Think about whether the operation returns a result or not.
🔧 Debug
expert
2:00remaining
Identify the runtime error in this Task usage
What error will this code produce when run?
C Sharp (C#)
using System;
using System.Threading.Tasks;

class Program {
    static void Main() {
        Task<int> task = Task.Run(() => 10 / 0);
        Console.WriteLine(task.Result);
    }
}
ANo error, prints 0
BSystem.DivideByZeroException
CCompilation error
DSystem.AggregateException
Attempts:
2 left
💡 Hint
Exceptions inside Tasks are wrapped when accessing Result.

Practice

(1/5)
1. What is the main difference between Task and Task<T> in C#?
easy
A. Task does not return a value, Task<T> returns a value of type T.
B. Task runs synchronously, Task<T> runs asynchronously.
C. Task is used only for UI threads, Task<T> for background threads.
D. Task can return multiple values, Task<T> returns only one.

Solution

  1. Step 1: Understand Task behavior

    Task represents an asynchronous operation that does not return a result.
  2. Step 2: Understand Task<T> behavior

    Task<T> represents an asynchronous operation that returns a value of type T when it completes.
  3. Final Answer:

    Task does not return a value, Task<T> returns a value of type T. -> Option A
  4. Quick Check:

    Return value presence = Task does not return a value, Task<T> returns a value of type T. [OK]
Hint: Remember: Task = no result, Task<T> = returns result [OK]
Common Mistakes:
  • Thinking Task runs synchronously
  • Confusing Task<T> with multiple return values
  • Assuming Task is only for UI threads
2. Which of the following is the correct way to declare a Task<int> that returns the number 5 asynchronously?
easy
A. Task<int> t = Task.Run(() => 5);
B. Task<int> t = new Task<int>(5);
C. Task<int> t = Task<int>.Run(5);
D. Task<int> t = Task.Run<int>(5);

Solution

  1. Step 1: Check correct Task<T> creation syntax

    Use Task.Run(() => value) to create and start a task returning a value.
  2. Step 2: Validate each option

    Task<int> t = Task.Run(() => 5); uses Task.Run(() => 5), which is correct. Options A, B, and C use invalid constructors or methods.
  3. Final Answer:

    Task<int> t = Task.Run(() => 5); -> Option A
  4. Quick Check:

    Correct Task creation syntax = Task<int> t = Task.Run(() => 5); [OK]
Hint: Use Task.Run with lambda to return values asynchronously [OK]
Common Mistakes:
  • Trying to pass value directly to Task constructor
  • Using non-existent Task.Run overloads
  • Confusing Task and Task<T> creation
3. What will be the output of this C# code?
async Task<int> GetNumberAsync() { return 10; }

var task = GetNumberAsync();
Console.WriteLine(task.Result);
medium
A. Task<int>
B. 10
C. Compilation error
D. Deadlock or runtime error

Solution

  1. Step 1: Understand async method returning Task<int>

    The method returns a Task that completes with value 10.
  2. Step 2: Accessing task.Result

    Accessing Result blocks until the task finishes and returns 10.
  3. Final Answer:

    10 -> Option B
  4. Quick Check:

    Task.Result blocks and returns value = 10 [OK]
Hint: Task.Result blocks and returns the result value [OK]
Common Mistakes:
  • Expecting Task<int> printed instead of value
  • Thinking async method returns int directly
  • Assuming runtime error without synchronization context
4. Identify the error in this code snippet:
Task<int> task = Task.Run(() => 42);
int result = await task;
medium
A. Task<int> must be declared as void
B. Task.Run cannot return int
C. Cannot use await outside an async method
D. Missing parentheses in Task.Run

Solution

  1. Step 1: Check usage of await keyword

    await can only be used inside methods marked with async.
  2. Step 2: Analyze code context

    The snippet does not show an async method, so using await here causes a compile error.
  3. Final Answer:

    Cannot use await outside an async method -> Option C
  4. Quick Check:

    Await requires async method = Cannot use await outside an async method [OK]
Hint: Always mark method async to use await inside it [OK]
Common Mistakes:
  • Assuming Task.Run cannot return int
  • Thinking Task<int> can be void
  • Ignoring async keyword requirement for await
5. You want to run two tasks in parallel: one returns an int, the other returns a string. How do you wait for both and get their results efficiently?
hard
A. Use Task.WaitAll(task1, task2) and cast results to correct types.
B. Call task1.Wait() and task2.Wait() sequentially, then get results.
C. Use await task1 then await task2 one after another.
D. Use await Task.WhenAll(task1, task2) then access task1.Result and task2.Result.

Solution

  1. Step 1: Understand parallel task waiting

    Task.WhenAll waits for all tasks to complete concurrently.
  2. Step 2: Access results after waiting

    After await Task.WhenAll(...), you can safely access each task's Result without blocking.
  3. Final Answer:

    Use await Task.WhenAll(task1, task2) then access task1.Result and task2.Result. -> Option D
  4. Quick Check:

    Parallel wait with Task.WhenAll = Use await Task.WhenAll(task1, task2) then access task1.Result and task2.Result. [OK]
Hint: Use Task.WhenAll to await multiple tasks efficiently [OK]
Common Mistakes:
  • Waiting tasks sequentially losing parallelism
  • Using blocking Wait() causing deadlocks
  • Casting results instead of accessing Task<T>.Result
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