Sobes.tech
Junior

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

sobes.tech AI

Отговор от 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 прави асинхронния код по-лесен за четене и подобен на синхронен, елиминирайки необходимостта да се пише ръчно код за продължение или да се използват обратни повиквания (callbacks).