В этой статье я попытаюсь охватить как самые простые, так и самые сложные темы асинхронного программирования. Я хотел бы иметь статью, к которой можно обращаться снова и снова, независимо от того, на каком этапе вашей карьеры и чем вы занимаетесь.

Прежде всего, давайте начнем статью со знакомства с тем, что это за термины.

C# Async/Await — это мощная функция, представленная в C# 5.0 для упрощения асинхронного программирования и упрощения написания асинхронного кода. Это позволяет вам писать асинхронный код более последовательным и читабельным образом, не блокируя основной поток вашего приложения.

public async Task<List<Customer>> GetCustomersAsync()
{
    using (var dbContext = new MyDbContext())
    {
        // The ToListAsync method executes the query asynchronously
        return await dbContext.Customers.ToListAsync();
    }
}

Понимание Async/Await

В C# асинхронное программирование обычно используется для обработки длительных операций, таких как сетевые вызовы, файловый ввод-вывод или запросы к базе данных, без блокировки основного потока. До появления async/await разработчики использовали обратные вызовы и задачи для достижения асинхронного поведения. Однако эти подходы могут привести к сложному и трудночитаемому коду, известному как «ад обратных вызовов».

С помощью async/await вы можете писать асинхронный код так же, как и синхронный код, что делает его более удобным в сопровождении и более простым для понимания.

Асинхронные и ожидающие ключевые слова:

  1. async: это модификатор, используемый перед методом или лямбда-выражением, чтобы указать, что метод содержит асинхронные операции. Тип возвращаемого значения асинхронного метода должен быть Task, Task<T> или ValueTask<T>.
  2. await: используется в асинхронном методе, чтобы указать, что метод должен дождаться завершения асинхронной операции. При использовании await метод не будет блокироваться; вместо этого он возвращает управление вызывающему методу до завершения ожидаемой задачи.

Когда использовать Async/Await:

Вы должны использовать async/await при работе с операциями, выполнение которых может занять значительное время, или когда вы хотите освободить основной поток для выполнения других задач…