Middle
C# da async/await mexanizmi qanday ishlaydi?
sobes.tech AI
AIdan javob
async/await механизми, asinxron kodni yozishni imkon beradi, u sinxron kabi ko'rinadi.
- Kalit so'z
async: Metodni asinxron sifatida belgilaydi. Bunday metodawaitoperatorini o'z ichiga olishi mumkin. - Kalit so'z
await: Asinxron operatsiyani chaqirishdan oldin ishlatiladi (odatdaTaskyokiTask<T>ni qaytaradigan metod).awaitga erishilganda, boshqaruv chaqiruvchi metodga qaytariladi va bo'shagan oqim boshqa ishlarni bajarishi mumkin. Task/Task<T>: Asinxron operatsiyaning yakunlanishini va uning natijasini (agarTask<T>bo'lsa) va'da qiladi.awaitbu "va'da" ning yakunlanishini "kutadi".- Holat mashinasi: Kompilyator asinxron metodni holat mashinasiga aylantiradi. Bu mashina
awaitga erishilganda metodning holatini saqlaydi. - Davom etish: Kutayotgan vazifa yakunlangach, bajarish muhitlari qolgan qismini (davomini) ishga tushirishni rejalashtiradi, bu oqimdan yoki agar u ushlangan bo'lsa, aynan bir xil sinxronizatsiya kontekstida.
- Boshqaruvni qaytarish: Asinxron operatsiya tugagach, boshqaruv
awaitdan keyingi nuqtaga qaytadi va metodning bajarilishi saqlangan holat bilan davom etadi.
// Asinxron metod
async Task<int> GetLengthAsync(string url)
{
// HTTP mijozini yaratish
using var client = new HttpClient();
// URL ga asinxron so'rov yuborish
// Await so'rov yakunlanishini kutmay, oqimni bloklamaydi
string content = await client.GetStringAsync(url);
// Davom etish, kontent olgach bajariladi
return content.Length;
}
// Asinxron metoddan foydalanish
async void Button_Click(object sender, EventArgs e)
{
// Await GetLengthAsync ning tugashini kutadi
// UI oqimi bloklanmaydi
int length = await GetLengthAsync("https://example.com");
// UI elementini yangilash
Label1.Text = $"Kontent uzunligi: {length}";
}