Async methods let your program do other work while waiting for a task to finish. Returning values from async methods means you can get results back without stopping everything.
When you want to fetch data from the internet without freezing your app.
When reading a file and you want to keep the app responsive.
When calling a slow database query but still want to do other things.
When you want to perform calculations in the background and get the result later.
This program defines an async method that adds two numbers after a short delay. The Main method waits for the result and then prints it.
C Sharp (C#)
using System;
using System.Threading.Tasks;
class Program {
static async Task<int> CalculateSumAsync(int a, int b) {
await Task.Delay(500); // Simulate workreturn a + b;
}
static async Task Main(string[] args) {
Console.WriteLine("Starting calculation...");
int result = await CalculateSumAsync(5, 7);
Console.WriteLine($"Result is {result}");
}
}
OutputSuccess
Important Notes
You must use await when calling async methods to get their result.
Async methods returning values use Task<T>, while those not returning values use Task.
Marking a method async allows use of await inside it.
Summary
Async methods can return values using Task<T>.
Use await to get the returned value without blocking.
This helps keep programs responsive during slow operations.
Practice
(1/5)
1. What type should an async method return if it needs to return a value of type int?
easy
A. void
B. Task
C. int
D. Task<int>
Solution
Step 1: Understand async method return types
Async methods that return a value must return Task<T> where T is the value type.
Step 2: Match the return type to the value type
Since the method returns an int, the return type should be Task<int>.
Final Answer:
Task<int> -> Option D
Quick Check:
Async method returning int uses Task<int> [OK]
Hint: Async methods returning values use Task<T> [OK]
Common Mistakes:
Using void for async methods that return values
Returning int directly from async method
Using Task without generic type for returning values
2. Which of the following is the correct syntax to declare an async method that returns a string value?
easy
A. async Task<string> GetNameAsync()
B. string async Task GetNameAsync()"
C. Task async string GetNameAsync()
D. async string GetNameAsync()
Solution
Step 1: Identify correct async method syntax
An async method returning a value must have the signature: async Task<T> MethodName().
Step 2: Check each option
async Task<string> GetNameAsync() matches the correct syntax: async Task<string> GetNameAsync(). Others have wrong order or missing Task<T>.
async Task<int> GetNumberAsync() { return 5; }
async Task Main()
{
int result = await GetNumberAsync();
Console.WriteLine(result);
}
medium
A. Task<int>
B. 5
C. Compilation error
D. 0
Solution
Step 1: Understand async method return and await
The method GetNumberAsync returns a Task<int> with value 5. Await unwraps the value.
Step 2: Check what is printed
The awaited result is 5, so Console.WriteLine(result) prints 5.
Final Answer:
5 -> Option B
Quick Check:
Await unwraps Task<int> to int value 5 [OK]
Hint: Await unwraps Task<T> to get the value [OK]
Common Mistakes:
Printing Task<int> instead of awaited int
Expecting compilation error due to async
Assuming default int value 0 is printed
4. Identify the error in this async method:
async Task<int> CalculateAsync()
{
int value = 10;
return Task.FromResult(value);
}
medium
A. No error, code is correct
B. Method should return int, not Task<int>
C. Missing await keyword before Task.FromResult
D. Returning Task.FromResult inside async method causes nested Task
Solution
Step 1: Analyze return statement in async method
Async methods can return Task<T> directly, such as Task.FromResult(value), which is a common and valid pattern for completed tasks.
Step 2: Verify the code runs correctly
The async state machine properly handles the returned Task<int>, producing a single Task<int> with value 10 for the caller. No nesting or errors occur.
Final Answer:
No error, code is correct -> Option A
Quick Check:
Task.FromResult is valid in async Task<int> methods [OK]
Hint: Task.FromResult(value) is valid in async Task<T> methods [OK]
Common Mistakes:
Misunderstanding that Task.FromResult causes nested Tasks
Thinking async methods must return T directly, not Task<T>
Believing await is required before Task.FromResult
5. You want to write an async method that fetches user data and returns the user's name as a string. The fetching is simulated by a delay. Which of the following implementations correctly returns the name without blocking the caller?
hard
A. async string GetUserNameAsync() { await Task.Delay(1000); return \"Alice\"; }
B. Task<string> GetUserNameAsync() { return \"Alice\"; }
C. async Task<string> GetUserNameAsync() { await Task.Delay(1000); return \"Alice\"; }
D. async Task GetUserNameAsync() { await Task.Delay(1000); return \"Alice\"; }"
Solution
Step 1: Check method signature and return type
The method must be async and return Task<string> to return a string asynchronously.
Step 2: Verify method body and return statement
async Task<string> GetUserNameAsync() { await Task.Delay(1000); return \"Alice\"; } uses await Task.Delay(1000) to simulate delay and returns the string correctly. Others have wrong return types or missing async.