Что такое async/await · C# Backend — JobPilot

Что такое async/await

C# Backend · 81%
Вопрос 3364 / #
Пример ответа

Коротко: В C# async/await — это пара ключевых слов, которые позволяют писать асинхронный код, сохраняя синхронный стиль, что я активно использовал для повышения отзывчивости и масштабируемости серверных приложений.

Ключевые идеи:
  • async объявляет метод как асинхронный, позволяя использовать await внутри него
  • await приостанавливает выполнение метода до завершения задачи, освобождая поток для других операций
  • Это упрощает обработку I/O-операций, таких как запросы к БД или API, без блокировки потоков
Пример: Например, при запросе к базе данных: вместо блокировки потока на время выполнения запроса, я использовал await для асинхронного ожидания результата, позволяя потоку обрабатывать другие запросы.
Пример асинхронного метода для получения данных из базы данных с использованием Entity Framework Core
csharp
public async Task<List<User>> GetUsersAsync()
{
    using (var context = new ApplicationDbContext())
    {
        // Асинхронное выполнение запроса к базе данных
        var users = await context.Users
            .Where(u => u.IsActive)
            .ToListAsync();
        return users;
    }
}
Вопросы для интервьюера:
  • Как вы обрабатываете исключения в асинхронных методах?Я оборачиваю await в try-catch блок, так как исключения из асинхронных операций выбрасываются при await, что позволяет корректно их перехватывать и логировать.
  • Какие проблемы могут возникнуть при использовании async/await?Распространённые проблемы включают deadlock при неправильном использовании .Result или .Wait() в UI-потоках и накопление задач без должного управления, что может привести к утечкам памяти.
Практический совет (на неделю):
  1. Всегда используйте async/await для всех I/O-операций в бэкенде, чтобы избежать блокировки потоков и улучшить масштабируемость.
  2. Избегайте смешивания асинхронного и синхронного кода, например, не вызывайте .Result в асинхронном контексте, чтобы предотвратить deadlock.

Мы используем cookie для улучшения сайта. Продолжая пользоваться сайтом, вы соглашаетесь с политикой cookie и политикой конфиденциальности.