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 գործողությունը ավարտվեց.");
}
// async մեթոդ, որը վերադարձնում է Task<int>
public async Task<int> GetValueAsync()
{
await Task.Delay(500);
return 42;
}
// Օգտագործում async և await Main մեթոդում (օրինակ՝ սովորաբար գործարկվում է async Main-ով .NET Core 3.0+)
public static async Task Main(string[] args)
{
Console.WriteLine("Սկսում...");
// Կոչում ենք ասինխրոն մեթոդներ
await DoSomethingAsync();
int result = await GetValueAsync();
Console.WriteLine($"Արդյունք: {result}");
Console.WriteLine("Ավարտվեց.");
}
Հիմնական առավելությունը async/await-ի՝ ձեռքով հոսքերի կամ callback-ների փոխարեն՝ կոդը գրելն ու ընթերցանությունը հեշտացնելն է։ Այն գրեթե նույն տեսք ունի, ինչ սինխրոնային կոդը, բայց չի խափանում հոսքը, ինչը կարևոր է օգտագործողի ինտերֆեյսով կամ բարձր բեռով սերվերային ծրագրերում։