codingstuff.io
ExploreTutorialsProblemsCS Subjects
Get Started
ExploreTutorialsProblemsCS Subjects
Get Started
codingstuff.io

Master the art of building software through interactive tutorials, real-world problems, and guided projects.

Pune, Maharashtra, India

codingstuffmail@gmail.com

Product

  • Explore
  • Tutorials
  • Problems
  • CS Subjects

Company

  • About
  • Contact
  • Privacy Policy
  • Terms & Conditions
  • Sitemap

© 2026 codingstuff.io. All rights reserved.

Built with ❤️ for developers everywhere

/
/
All Tutorials
🔷

C# Programming

43 / 60 topics
41Async Programming in C#42Tasks and Task Parallel Library (TPL)43Async and Await Keywords
Tutorials/C# Programming/Async and Await Keywords
🔷C# Programming

Async and Await Keywords

Updated 2026-05-15
10 min read

Async and Await Keywords

Introduction

In the world of programming, especially in languages like C#, handling asynchronous operations is crucial for building responsive applications. Asynchronous programming allows your application to perform other tasks while waiting for a long-running operation to complete. Traditionally, this was done using callbacks or event handlers, which could lead to complex and hard-to-maintain code.

C# introduced the async and await keywords to simplify asynchronous programming. These keywords allow you to write asynchronous code in a way that resembles synchronous code, making it easier to read and maintain. In this tutorial, we'll explore how to use these keywords effectively.

Concept

Asynchronous Methods

An asynchronous method is a method that returns a Task or Task<T>. It can contain one or more await expressions that pause the execution of the method until the awaited task completes.

Async Keyword

The async keyword is used to declare an asynchronous method. When you mark a method with async, it allows the use of the await keyword within the method and returns a Task or Task<T>.

Await Keyword

The await keyword is used to asynchronously wait for a task to complete. It suspends the execution of the current method until the awaited task completes, but it does not block the thread. This allows other tasks to run concurrently.

Examples

Let's look at some practical examples to understand how async and await work in C#.

Example 1: Basic Asynchronous Method

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        Console.WriteLine("Starting the asynchronous operation...");
        await PerformAsyncOperation();
        Console.WriteLine("Asynchronous operation completed.");
    }

    static async Task PerformAsyncOperation()
    {
        // Simulate a long-running task
        await Task.Delay(2000);
        Console.WriteLine("Task completed after 2 seconds.");
    }
}

In this example, the `Main` method is marked as `async`, allowing it to use the `await` keyword. The `PerformAsyncOperation` method simulates a long-running task using `Task.Delay`. When `await Task.Delay(2000)` is executed, the `PerformAsyncOperation` method pauses its execution for 2 seconds, but the `Main` method can continue executing other code.

### Example 2: Returning Values from Asynchronous Methods

```csharp
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        int result = await GetNumberAsync();
        Console.WriteLine($"The number is {result}");
    }

    static async Task<int> GetNumberAsync()
    {
        // Simulate a long-running task that returns an integer
        await Task.Delay(2000);
        return 42;
    }
}

In this example, the `GetNumberAsync` method returns a `Task<int>`, indicating that it will eventually return an integer. The `await` keyword is used to wait for the task to complete and retrieve the result.

### Example 3: Handling Exceptions

```csharp
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        try
        {
            await ThrowExceptionAsync();
        }
        catch (Exception ex)
        {
            Console.WriteLine($"An error occurred: {ex.Message}");
        }
    }

    static async Task ThrowExceptionAsync()
    {
        // Simulate a long-running task that throws an exception
        await Task.Delay(2000);
        throw new Exception("Something went wrong!");
    }
}

In this example, the `ThrowExceptionAsync` method simulates a long-running task that throws an exception after 2 seconds. The `await` keyword is used to wait for the task to complete, and any exceptions thrown by the task are caught in the `try-catch` block.

## What's Next?

Now that you have a good understanding of how to use the `async` and `await` keywords in C#, you can explore more advanced topics such as concurrency in C#. Concurrency involves executing multiple operations simultaneously, which can be achieved using various techniques like parallel programming or asynchronous programming patterns. Understanding these concepts will help you build more efficient and responsive applications.

Happy coding!

PreviousTasks and Task Parallel Library (TPL)Next Concurrency in C#

Recommended Gear

Tasks and Task Parallel Library (TPL)Concurrency in C#