Middle
Kā darbojas async/await mehānisms C#-ā?
sobes.tech AI
Atbilde no AI
async/await mehānisms ļauj rakstīt asinhronu kodu, kas izskatās kā sinhrons.
- Atslēgvārds
async: atzīmē metodi kā asinhronu. Šāda metode var saturētawaitoperatoru. - Atslēgvārds
await: tiek izmantots pirms asinhronas operācijas izsaukšanas (parasti metodes, kas atgriežTaskvaiTask<T>). Kad izpilde sasniedzawait, kontrole tiek atgriezta izsaucējam metodam, un brīvais pavedienis var veikt citu darbu. Task/Task<T>: pārstāv solījumu, ka asinhrona operācija tiks pabeigta un tās rezultāts (jaTask<T>) būs pieejams.await"gaida" šī "solījuma" pabeigšanu.- Stāvokļa mašīna: kompilators pārvērš asinhrono metodi par galīgo automātu. Šis automāts saglabā metodes stāvokli, sasniedzot
await. - Turpinājums: kad gaidāmā uzdevuma pabeigšana notiek, izpildes vide plāno izpildīt atlikušās asinhronās metodes daļas (turpinājumu) pēc pavediena no pavedienu groza vai tajā pašā sinhronizācijas kontekstā, ja tas ir aizķerts.
- Vadības atgriešana: pēc asinhronas operācijas pabeigšanas vadība tiek atgriezta pie punkta pēc
await, un metode turpinās ar saglabāto stāvokli.
// Asinhronā metode
async Task<int> GetLengthAsync(string url)
{
// Izveido HTTP klientu
using var client = new HttpClient();
// Veic asinhronu pieprasījumu uz URL
// `await` gaida pieprasījuma pabeigšanu, neblokējot pavedienu
string content = await client.GetStringAsync(url);
// Turpinājums tiek izpildīts pēc satura saņemšanas
return content.Length;
}
// Asinhronas metodes izmantošana
async void Button_Click(object sender, EventArgs e)
{
// Gaidīt GetLengthAsync pabeigšanu
// UI pavedienu neblokē
int length = await GetLengthAsync("https://example.com");
// Atjaunina UI elementu
Label1.Text = $"Satura garums: {length}";
}