Middle
Ինչպես է աշխատում async/await մեխանիզմը C#-ում?
sobes.tech AI
Պատասխան AI-ից
async/await մեխանիզմը թույլ է տալիս գրել ասինխրոն կոդ, որը տեսք ունի որպես սինխրոն:
- Բանալի բառ
async: նշում է մեթոդը որպես ասինխրոն: چنین մեթոդը կարող է պարունակելawaitհրահանգը: - Բանալի բառ
await: օգտագործվում է նախքան ասինխրոն գործողության կանչը (հաճախTaskկամTask<T>վերադարձնող մեթոդ): Երբ կատարման ընթացքը հասնում էawait, վերահսկողությունը վերադառնում է կանչող մեթոդին, և ազատված թելն կարող է կատարել այլ աշխատանք: Task/Task<T>: ներկայացնում է խոստում ավարտել ասինխրոն գործողությունը և դրա արդյունքը (հատկապեսTask<T>):await"պատմում" է այս "խոստում" ավարտին հասնել:- Կարգավիճակի մեքենա: Կոմպիլյատորը վերածում է ասինխրոն մեթոդը կարգավիճակի մեքենայի: Այս մեքենան պահպանում է մեթոդի վիճակը
awaitհասնելու պահին: - Շարունակություն: Երբ սպասվող առաջադրանքը ավարտվի, գործարկման միջավայրը պլանավորում է մնացած մասի (շարունակության) կատարմանը, որը տեղի է ունենում թելից կամ նույն սինխրոնիզացիոն կոնտեքստից, եթե այն բռնվել է:
- Վերադարձ վերահսկողություն: Ասինխրոն գործողությունը ավարտվելուց հետո վերահսկողությունը վերադառնում է
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}";
}