Sobes.tech
Middle

Ինչպես է աշխատում async/await մեխանիզմը C#-ում?

sobes.tech AI

Պատասխան AI-ից

async/await մեխանիզմը թույլ է տալիս գրել ասինխրոն կոդ, որը տեսք ունի որպես սինխրոն:

  1. Բանալի բառ async: նշում է մեթոդը որպես ասինխրոն: چنین մեթոդը կարող է պարունակել await հրահանգը:
  2. Բանալի բառ await: օգտագործվում է նախքան ասինխրոն գործողության կանչը (հաճախ Task կամ Task<T> վերադարձնող մեթոդ): Երբ կատարման ընթացքը հասնում է await, վերահսկողությունը վերադառնում է կանչող մեթոդին, և ազատված թելն կարող է կատարել այլ աշխատանք:
  3. Task / Task<T>: ներկայացնում է խոստում ավարտել ասինխրոն գործողությունը և դրա արդյունքը (հատկապես Task<T>): await "պատմում" է այս "խոստում" ավարտին հասնել:
  4. Կարգավիճակի մեքենա: Կոմպիլյատորը վերածում է ասինխրոն մեթոդը կարգավիճակի մեքենայի: Այս մեքենան պահպանում է մեթոդի վիճակը await հասնելու պահին:
  5. Շարունակություն: Երբ սպասվող առաջադրանքը ավարտվի, գործարկման միջավայրը պլանավորում է մնացած մասի (շարունակության) կատարմանը, որը տեղի է ունենում թելից կամ նույն սինխրոնիզացիոն կոնտեքստից, եթե այն բռնվել է:
  6. Վերադարձ վերահսկողություն: Ասինխրոն գործողությունը ավարտվելուց հետո վերահսկողությունը վերադառնում է await-ից հետո գտնվող կետին, և մեթոդի կատարմանը շարունակվում է պահած վիճակով:
// Ասինխրոն մեթոդ
async Task<int> GetLengthAsync(string url)
{
    // Ստեղծել HTTP հաճախորդ
    using var client = new HttpClient(); 
    // Կատարել ասինխրոն հարցում URL-ով
    // Await սպասում է հարցման ավարտին առանց թելն արգելափակելու
    string content = await client.GetStringAsync(url); 
    // Շարունակությունը կատարվում է հետո, երբ ստացվում է բովանդակությունը
    return content.Length; 
}

// Օգտագործում է ասինխրոն մեթոդը
async void Button_Click(object sender, EventArgs e)
{
    // Await սպասում է GetLengthAsync-ի ավարտին
    // UI-թելը չի արգելափակվում
    int length = await GetLengthAsync("https://example.com"); 
    // UI տարրն արդիականացնել
    Label1.Text = $"Բովանդակության երկարությունը: {length}"; 
}