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

Async and await keywords in C Sharp (C#) - Mini Project: Build & Apply

Choose your learning style10 modes available
Async and await keywords
📖 Scenario: You are building a simple console app that fetches data from a server. To keep the app responsive, you will use async and await keywords to handle the data fetching without blocking the main thread.
🎯 Goal: Create an asynchronous method to simulate fetching data, then call it using await and display the result.
📋 What You'll Learn
Create an asynchronous method called FetchDataAsync that returns a Task<string>.
Inside FetchDataAsync, simulate a delay of 2 seconds using Task.Delay.
Return a string message from FetchDataAsync after the delay.
In the Main method, call FetchDataAsync using await and store the result in a variable called data.
Print the data variable to the console.
💡 Why This Matters
🌍 Real World
Many apps need to fetch data from the internet or perform long tasks without freezing the screen. Using <code>async</code> and <code>await</code> helps keep apps smooth and responsive.
💼 Career
Understanding asynchronous programming is essential for software developers working on web apps, desktop apps, or any program that handles input/output or network calls efficiently.
Progress0 / 4 steps
1
Create the asynchronous method
Create an asynchronous method called FetchDataAsync that returns Task<string>. Inside it, simulate a 2-second delay using await Task.Delay(2000). After the delay, return the string "Data fetched successfully".
C Sharp (C#)
Hint

Use async before the method return type and await Task.Delay(2000) to simulate waiting.

2
Call the asynchronous method with await
Inside the Main method, call FetchDataAsync using await and store the result in a variable called data.
C Sharp (C#)
Hint

Use string data = await FetchDataAsync(); inside Main.

3
Print the fetched data
Add a Console.WriteLine statement inside the Main method to print the data variable.
C Sharp (C#)
Hint

Use Console.WriteLine(data); to show the result.

4
Run and see the output
Run the program and observe the output. It should print Data fetched successfully after a 2-second delay.
C Sharp (C#)
Hint

Wait 2 seconds, then see the message printed.

Practice

(1/5)
1. What is the main purpose of the async keyword in C#?
easy
A. To make a method run faster by using multiple threads automatically
B. To mark a method that can run asynchronously without blocking the caller
C. To declare a method that returns void only
D. To pause the execution of a method until a task completes

Solution

  1. Step 1: Understand the role of async

    The async keyword marks a method so it can run asynchronously, allowing other work to continue without waiting.
  2. Step 2: Differentiate from other options

    It does not automatically make code faster or use multiple threads, nor does it pause execution by itself.
  3. Final Answer:

    To mark a method that can run asynchronously without blocking the caller -> Option B
  4. Quick Check:

    async marks asynchronous methods = A [OK]
Hint: Async marks methods that run without blocking [OK]
Common Mistakes:
  • Thinking async makes code multithreaded automatically
  • Confusing async with pausing execution
  • Believing async only works with void methods
2. Which of the following is the correct way to declare an asynchronous method that returns a string in C#?
easy
A. public string async GetData()
B. public async string GetData()
C. public Task async<string> GetData()
D. public async Task<string> GetData()

Solution

  1. Step 1: Recall async method return types

    Async methods that return a value must return Task<T>, where T is the return type, here string.
  2. Step 2: Check syntax correctness

    public async Task<string> GetData() correctly uses async Task<string>. Other options have wrong order or missing Task.
  3. Final Answer:

    public async Task<string> GetData() -> Option D
  4. Quick Check:

    Async methods returning values use Task<T> = A [OK]
Hint: Async methods returning values use Task<T> type [OK]
Common Mistakes:
  • Placing async after return type
  • Returning just string instead of Task<string>
  • Using async keyword incorrectly in method signature
3. What will be the output of the following C# code?
async Task<int> GetNumberAsync() { await Task.Delay(100); return 5; }
async Task Main() { var result = await GetNumberAsync(); Console.WriteLine(result); }
medium
A. 5
B. 0
C. Task
D. Compilation error

Solution

  1. Step 1: Understand async method behavior

    The method GetNumberAsync waits 100ms then returns 5 asynchronously.
  2. Step 2: Await the result and print

    The Main method awaits GetNumberAsync and prints the returned value, which is 5.
  3. Final Answer:

    5 -> Option A
  4. Quick Check:

    Await returns method result = 5 [OK]
Hint: Await unwraps async result to actual value [OK]
Common Mistakes:
  • Expecting Task object printed instead of value
  • Ignoring await causing wrong output
  • Thinking async delays block main thread
4. Identify the error in this code snippet:
async Task<int> CalculateAsync() { return 10; }
void Main() { var result = CalculateAsync(); Console.WriteLine(result); }
medium
A. Missing await keyword when calling CalculateAsync
B. CalculateAsync should return int, not Task<int>
C. Main method must be async to call CalculateAsync
D. CalculateAsync cannot return a value

Solution

  1. Step 1: Analyze method call and return type

    CalculateAsync returns a Task<int>, but Main calls it without await, so result is a Task, not int.
  2. Step 2: Understand how to get actual value

    To get the int value, await must be used, but Main is not async, so this is a problem.
  3. Final Answer:

    Missing await keyword when calling CalculateAsync -> Option A
  4. Quick Check:

    Call async method with await = C [OK]
Hint: Always await async calls to get results [OK]
Common Mistakes:
  • Calling async method without await
  • Expecting async method to return direct value
  • Making Main async without proper signature
5. You want to run two independent async tasks and get their results as soon as both finish. Which code correctly does this in C#?
hard
A. var result1 = await Task1(); var result2 = await Task2();
B. var result1 = Task1().Result; var result2 = Task2().Result;
C. var task1 = Task1(); var task2 = Task2(); var result1 = await task1; var result2 = await task2;
D. await Task.WhenAll(Task1(), Task2()); var result1 = Task1().Result; var result2 = Task2().Result;

Solution

  1. Step 1: Understand running tasks concurrently

    Starting both tasks without awaiting immediately lets them run in parallel.
  2. Step 2: Await both tasks after starting

    Awaiting each task after starting both ensures you wait for both to finish and get results efficiently.
  3. Step 3: Analyze other options

    var result1 = await Task1(); var result2 = await Task2(); awaits sequentially, running tasks one after another. var result1 = Task1().Result; var result2 = Task2().Result; blocks synchronously causing deadlocks. await Task.WhenAll(Task1(), Task2()); var result1 = Task1().Result; var result2 = Task2().Result; awaits but then calls Result again, causing redundant calls.
  4. Final Answer:

    var task1 = Task1(); var task2 = Task2(); var result1 = await task1; var result2 = await task2; -> Option C
  5. Quick Check:

    Start tasks first, then await both = B [OK]
Hint: Start tasks first, then await both to run concurrently [OK]
Common Mistakes:
  • Awaiting tasks one by one causing sequential execution
  • Using .Result causing blocking and deadlocks
  • Calling tasks multiple times causing duplicate work
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