Sobes.tech
Junior

Async жана await ачкыч сөздөрүн колдонуу менен асинхрондук программалоо деген эмне?

sobes.tech AI

AIден жооп

Асыныкрон программалоо async жана await аркылуу ишке ашыруу узак убакыт алчу операцияларды (мисалы, киргизүү-чыгаруу, тармактык суроолор) негизги аткаруу агымын тоскоолдуксуз жүргүзүүгө мүмкүндүк берет. Бул колдонмонун жооп берүүчүүлүгүн жакшыртат.

  • async: Методду өзгөртүүчү катары колдонулат жана компиляторго анын ичинде await операторлору колдонулушу күтүлүп жатканын көрсөтөт. async белгиленген метод Task, Task<T> же void кайтаруусу мүмкүн (бирок voidдан алыс болуу керек, чынжырлардан башка). Кайтарылган Task же Task<T> ишти аткаруу аяктагандан кийин бүтө элек экенин көрсөтөт.
  • await: Task же Task<T> кайтарган асинхрондук операцияга колдонулат. Эми await операторуна жеткенде, метод "тоқтотулат" жана учурдагы агымды бошотот. Асинхрондук операция фондук режимде ишке ашырылат (же жиптер пулун колдонуп, же операциялык тутумдун киргизүү-чыгаруу механизмин колдонулат). Операция аяктагандан кийин, метод кайра await же ошол эле жипте, эгер ал жеткиликтүү болсо, улантылат.

Негизги колдонуу мисалы:

// `async` метод, ал `Task` кайтарат
public async Task DoSomethingAsync()
{
    // Асинхрондук операцияны аткарып, анын аяктоосун күтүп жатабыз
    await Task.Delay(1000); // Узак ишти имитациялоо
    Console.WriteLine("Асинхрондук операция аяктады.");
}

// `async` метод, ал `Task<int>` кайтарат
public async Task<int> GetValueAsync()
{
    await Task.Delay(500);
    return 42;
}

// `async` жана `await` колдонуу Main методунда (мисалы, .NET Core 3.0+ версиясындагы `async Main` аркылуу)
public static async Task Main(string[] args)
{
    Console.WriteLine("Башталды...");
    
    // Асинхрондук методдорду чакырабыз
    await DoSomethingAsync();
    int result = await GetValueAsync();
    
    Console.WriteLine($"Натыйжа: {result}");
    Console.WriteLine("Аякталды.");
}

async/await негизги артыкчылыгы — кол менен агымдарды же колбэк-колдонууларды колдонбоо менен, асинхрондук кодду жазуу жана окуу жеңилдейт. Ал синхрондук кодго окшош көрүнөт, бирок жипти блоктебейт, бул колдонуучу интерфейси бар колдонмолор жана жогорку жүктөмдүү сервердик колдонмолор үчүн маанилүү.