C# | Asynchronous programming with [async | await | Task]

Hassan BOLAJRAF - Jul 23 - - Dev Community
Note
You can check other posts on my personal website: https://hbolajraf.net

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

  1. Define an async Method: To use await, define an async method within a class, typically returning a Task or Task<T>.
   public async Task MyAsyncMethod()
   {
       // Asynchronous code here
   }
Enter fullscreen mode Exit fullscreen mode
  1. Call the async Method: In another method, you can call your async method with the await keyword.
   await MyAsyncMethod();
Enter fullscreen mode Exit fullscreen mode

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.

async Task MyAsyncMethod()
{
    var result = await SomeAsyncTask();
    // Code after the await will execute when SomeAsyncTask is completed.
}
Enter fullscreen mode Exit fullscreen mode

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.

try
{
    await SomeAsyncMethod();
}
catch (Exception ex)
{
    // Handle the exception
}
Enter fullscreen mode Exit fullscreen mode

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.

async Task MyAsyncMethod(CancellationToken cancellationToken)
{
    // Check for cancellation
    cancellationToken.ThrowIfCancellationRequested();

    // Continue with the operation
}
Enter fullscreen mode Exit fullscreen mode

Real-world Example

Here's an example of a common real-world scenario: making an HTTP request asynchronously.

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();
    }
}
Enter fullscreen mode Exit fullscreen mode

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.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .