Middle
Kuidas töötab async/await mehhanism C#-s?
sobes.tech AI
Vastus AI-lt
async/await mehhanism võimaldab kirjutada asünkroonset koodi, mis näeb välja nagu sünkrone.
- Võtmesõna
async: märgib meetodit kui asünkroonset. Selline meetod võib sisaldadaawaitoperaatorit. - Võtmesõna
await: kasutatakse enne asünkroonse operatsiooni (tavaliselt meetod, mis tagastabTaskvõiTask<T>). Kui täitmine jõuabawait-i, antakse juhtimine tagasi kutsuvale meetodile ning vabastatud niit võib teha muud tööd. Task/Task<T>: esindab lubadust, et asünkroonne operatsioon lõpeb ning selle tulemus (kuiTask<T>) on saadaval.await"oodab" selle "lubaduse" lõppemist.- Oleku masin: kompilaator teisendab asünkroonse meetodi lõplikuks automaadiks. See automaat salvestab meetodi oleku
await-i saavutamisel. - Jätkamine: kui oodatav ülesanne lõpeb, plaanib täitmise keskkond jätkata asünkroonse meetodi ülejäänud osa (jätku) sama niidi või samas sünkroniseerimiskontekstis, kui see on haaratud.
- Juhtimise tagastamine: pärast asünkroonse operatsiooni lõppu tagastatakse juhtimine
await-i järgsesse punkti ning meetod jätkub salvestatud olekuga.
// Asünkroonne meetod
async Task<int> GetLengthAsync(string url)
{
// Loome HTTP-klienti
using var client = new HttpClient();
// Teeme asünkroonse päringu URL-ile
// `await` ootab päringu lõppu, mitte ei blokeeri niiti
string content = await client.GetStringAsync(url);
// Jätkamine toimub pärast sisu saamist
return content.Length;
}
// Asünkroonse meetodi kasutamine
async void Button_Click(object sender, EventArgs e)
{
// Ootab GetLengthAsync lõppu
// UI-niit ei blokeeru
int length = await GetLengthAsync("https://example.com");
// Uuendab UI elementi
Label1.Text = $"Sisu pikkus: {length}";
}