Sobes.tech
Middle

C# тілінде асинхронды әдіс қалай жұмыс істейді?

sobes.tech AI

AI-дан жауап

C# тілінде асинхронды әдіс async кілттік сөзімен белгіленеді және әдетте бір немесе бірнеше await күту операторларын қамтиды. async кілттік сөзі await-ты әдіс ішінде пайдалануға мүмкіндік береді, бірақ өзі әдісті асинхронды етпейді.

Қашан орындалу await операторының жетуіне жетсе, басқару шақырушы тарапқа қайтарылады, ал күтілетін операция басқа ағында орындалады немесе асинхронды енгізу-шығу операциясын қолданады, ағымды ағынды блоктамай. Қашан күтілетін операция аяқталса, әдіс орындалуы await операторынан кейін қайта жалғасады.

Асинхронды әдістің қайтару типі әдетте Task, Task<TResult> немесе void (оқиға өңдегіштері үшін).

public async Task<string> GetDataAsync() // `async` әдіс `Task<string>` қайтарады
{
    // Асинхронды операция
    await Task.Delay(1000); // Ағынды блоктамай күту
    return "Деректер алынды";
}

public async Task ProcessDataAsync()
{
    string result = await GetDataAsync(); // `GetDataAsync` аяқталуын күту
    Console.WriteLine(result);
}

Негізгі компоненттер мен жұмыс принциптері:

  • async: Әдіс ішінде await қолдануға мүмкіндік береді.
  • await: Операторы, ол күтілетін тапсырма аяқталғанша әдістің орындалуын тоқтатады, шақырушы ағынды блоктамай.
  • Task / Task<TResult>: Асинхронды операцияны білдіреді. Task<TResult> TResult типіндегі нәтижесі бар асинхронды операцияны көрсетеді.
  • Күй машинасы: Компилятор асинхронды әдістің орындалуын басқару үшін күй машинасын құрады, ол await нүктелерінің арасында локальды айнымалылар мен орындалу күйін сақтайды.
  • SynchronizationContext: WPF, WinForms және ASP.NET Core-да асинхронды әдістің орындалуын қажетті контексте (мысалы, UI ағынында) қайта жалғастыру үшін пайдаланылады, бұл UI элементтеріне басқа ағындардан қол жеткізудегі мәселелерді болдырмайды. Консольдік қосымшаларда немесе кітапханаларда бұл контекст болмауы мүмкін.

Асинхрондылықты қолданудың артықшылықтары:

  • UI-дің жауапкершілігі: Ұзақ операциялар орындалу кезінде пайдаланушы интерфейсі жауапты болып қалады.
  • Сервердің масштабталуы: Серверлік қосымшалар шектеулі ағындарды пайдалана отырып, көп сұрауларды өңдей алады.