C# | Asynchronous programming with [async | await | Task]
Using await
and async Task
in C#
In C#, asynchronous programming is used to improve the responsiveness of applications by allowing tasks to run concurrently without blocking the main thread. The await
and async
keywords play a crucial role in achieving this. This guide will show you how to use await
and async Task
effectively.
Introduction
Asynchronous programming in C# is essential for tasks that may take a significant amount of time, such as I/O-bound operations or network requests. By using await
and async
, you can ensure that your application remains responsive while waiting for these tasks to complete.
Using async Task
Define an
async
Method: To useawait
, define anasync
method within a class, typically returning aTask
orTask<T>
.1 2 3 4
public async Task MyAsyncMethod() { // Asynchronous code here }
Call the
async
Method: In another method, you can call yourasync
method with theawait
keyword.1
await MyAsyncMethod();
The await
Keyword
The await
keyword is used within an async
method to pause execution until the awaited task completes. It allows the calling thread to continue other work without blocking.
1
2
3
4
5
async Task MyAsyncMethod()
{
var result = await SomeAsyncTask();
// Code after the await will execute when SomeAsyncTask is completed.
}
Exception Handling
To handle exceptions in asynchronous methods, you can use standard try-catch
blocks. When an exception is thrown in an async
method, it’s captured and propagated as part of the Task
.
1
2
3
4
5
6
7
8
try
{
await SomeAsyncMethod();
}
catch (Exception ex)
{
// Handle the exception
}
Cancellation Tokens
To cancel an asynchronous operation, you can use CancellationToken
. Pass a CancellationToken
to the asynchronous method, and check for cancellation within the method.
1
2
3
4
5
6
7
async Task MyAsyncMethod(CancellationToken cancellationToken)
{
// Check for cancellation
cancellationToken.ThrowIfCancellationRequested();
// Continue with the operation
}
Real-world Example
Here’s an example of a common real-world scenario: making an HTTP request asynchronously.
1
2
3
4
5
6
7
8
9
public async Task<string> FetchDataAsync(string url)
{
using (var httpClient = new HttpClient())
{
var response = await httpClient.GetAsync(url);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
}
What Next?
Using await
and async Task
in C# allows you to write responsive and efficient applications, especially when dealing with I/O-bound or long-running tasks. It enables you to keep your application responsive and improve the overall user experience by allowing multiple tasks to run concurrently without blocking the main thread.