Sobes.tech
Junior
112
questionbank

Как используется ключевое слово await в C#?

Ответ от нейросети

sobes.tech AI

Ключевое слово await используется в C# для неблокирующего ожидания завершения асинхронной операции.

Применение await возможно только внутри асинхронных методов, помеченных модификатором async.

Когда выполнение достигает оператора await, поток управления возвращается вызывающей стороне, а метод "приостанавливается", пока ожидаемая задача не завершится. После завершения задачи, выполнение метода возобновляется с того места, где остановилось.

Это позволяет освободить вызывающий поток (например, поток пользовательского интерфейса или потока веб-сервера) для выполнения других задач, повышая отзывчивость и масштабируемость приложения.

public async Task<string> GetDataAsync()
{
    // Имитация долговременной асинхронной операции
    await Task.Delay(2000);
    return "Данные получены";
}

public async Task ProcessDataAsync()
{
    Console.WriteLine("Начало обработки...");
    string result = await GetDataAsync(); // Ожидаем завершения GetDataAsync без блокировки
    Console.WriteLine($"Результат: {result}");
    Console.WriteLine("Обработка завершена.");
}

Ключевое слово await может применяться к:

  1. Задачам (Task, Task<T>, ValueTask, ValueTask<T>): Наиболее распространенный сценарий.
  2. awaitable-типам: Объектам, которые имеют метод GetAwaiter(), возвращающий тип с методами IsCompleted, GetResult() и OnCompleted() (для поддержки продолжения).

Использование await делает асинхронный код более читаемым и похожим на синхронный, избавляя от необходимости вручную писать код продолжения (continuation) или использовать обратные вызовы (callbacks).