Sobes.tech
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.

  1. Kalit so'z async: Metodni asinxron sifatida belgilaydi. Bunday metod await operatorini o'z ichiga olishi mumkin.
  2. Kalit so'z await: Asinxron operatsiyani chaqirishdan oldin ishlatiladi (odatda Task yoki Task<T> ni qaytaradigan metod). await ga erishilganda, boshqaruv chaqiruvchi metodga qaytariladi va bo'shagan oqim boshqa ishlarni bajarishi mumkin.
  3. Task / Task<T>: Asinxron operatsiyaning yakunlanishini va uning natijasini (agar Task<T> bo'lsa) va'da qiladi. await bu "va'da" ning yakunlanishini "kutadi".
  4. Holat mashinasi: Kompilyator asinxron metodni holat mashinasiga aylantiradi. Bu mashina await ga erishilganda metodning holatini saqlaydi.
  5. 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.
  6. Boshqaruvni qaytarish: Asinxron operatsiya tugagach, boshqaruv await dan 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}"; 
}