Как се използва ключовата дума 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 може да се прилага към:
- Задачи (Task, Task<T>, ValueTask, ValueTask<T>): най-често срещаният сценарий.
- awaitable типове: обекти, които имат метод
GetAwaiter(), който връща тип с методитеIsCompleted,GetResult()иOnCompleted()(за поддръжка на продължение).
Използването на await прави асинхронния код по-лесен за четене и подобен на синхронен, елиминирайки необходимостта да се пише ръчно код за продължение или да се използват обратни повиквания (callbacks).