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 робіць асінхронны код больш чытэльным і падобным на сінхронны, выдаляючы неабходнасць ручнога пісьма кода працягнення або выкарыстання callback-аў.