A Comprehensive Resource for Microsoft Technologies

Welcome, your go-to destination for everything related to .NET and Microsoft technologies. With over 10 years of experience in the IT industry, I am excited to share my knowledge and insights on this platform. This blog is dedicated to providing valuable information, tips, and tutorials that are not only relevant to the rapidly evolving IT industry but also essential for individuals working on real-time projects and preparing for interviews

C# Tutorial 11.1: Introduction to asynchronous programming

 Asynchronous programming is a crucial aspect of modern software development, allowing you to write more responsive and efficient applications. In C#, asynchronous programming is primarily achieved using the async and await keywords. This tutorial will guide you through the basics of asynchronous programming in C#.

1. Understanding Synchronous vs. Asynchronous

In synchronous programming, each operation is executed one after the other, blocking the execution until the current operation completes. On the other hand, asynchronous programming enables you to initiate an operation and continue with other tasks while waiting for the operation to complete.

2. Basics of async and await

The async and await keywords were introduced in C# to simplify asynchronous programming.

  • async: This keyword is used to declare an asynchronous method.
  • await: This keyword is used to asynchronously wait for a task to complete.
public async Task MyAsyncMethod()
{
    // Asynchronous operations go here
    await SomeAsyncOperation();
   
    // Code here executes after SomeAsyncOperation completes
}

3. Writing an Asynchronous Method

Let's create a simple asynchronous method that simulates a time-consuming operation:

public async Task DoSomethingAsync()
{
    Console.WriteLine("Start of async method");

    // Simulate a delay
    await Task.Delay(2000);

    Console.WriteLine("End of async method");
}

4. Calling an Asynchronous Method

When calling an asynchronous method, use the await keyword to asynchronously wait for its completion.

public async Task Main()
{
    Console.WriteLine("Before calling async method");

    await DoSomethingAsync();

    Console.WriteLine("After calling async method");
}

5. Error Handling in Asynchronous Code

Handle exceptions in asynchronous code using try-catch blocks as you would in synchronous code.

public async Task DoSomethingAsync()
{
    try
    {
        // Asynchronous operations go here
        await SomeAsyncOperation();
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Error: {ex.Message}");
    }
}

6. Task.Run for CPU-Bound Operations

For CPU-bound operations, use Task.Run to offload the work to a separate thread.

public async Task Main()
{
    Console.WriteLine("Before calling CPU-bound async method");

    await Task.Run(() => DoCpuBoundWork());

    Console.WriteLine("After calling CPU-bound async method");
}

public void DoCpuBoundWork()
{
    // CPU-bound operations go here
}

Conclusion

Asynchronous programming in C# provides a powerful way to improve the responsiveness and scalability of your applications. Understanding the basics of async and await is crucial for writing efficient and responsive code. As you delve deeper into asynchronous programming, you'll encounter advanced topics like cancellation tokens, progress reporting, and more.