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 негизги артыкчылыгы — кол менен агымдарды же колбэк-колдонууларды колдонбоо менен, асинхрондук кодду жазуу жана окуу жеңилдейт. Ал синхрондук кодго окшош көрүнөт, бирок жипти блоктебейт, бул колдонуучу интерфейси бар колдонмолор жана жогорку жүктөмдүү сервердик колдонмолор үчүн маанилүү.