Sobes.tech
Middle

C#-də async/await mexanizmi necə işləyir?

sobes.tech Süni İntellekt

AI-dan cavab

async/await mexanizmi, asinxron kodu yazmağa imkan verir ki, bu kod sinxron kimi görünür.

  1. Açar söz async: Metodu asinxron kimi işarə edir. Belə metod await ifadəsini daxil edə bilər.
  2. Açar söz await: Adətən Task və ya Task<T> qaytaran asinxron əməliyyatı çağırmadan əvvəl istifadə olunur. await-a çatanda, idarə çağıran metoda geri qaytarılır və sərbəst buraxılmış işçi axını başqa işləri görə bilər.
  3. Task / Task<T>: Asinxron əməliyyatın tamamlanması və onun nəticəsini (əgər Task<T> isə) vədə edir. await bu "vədiş"-in tamamlanmasını "gözləyir".
  4. Vəziyyət maşını: Tərtibçi, asinxron metodu vəziyyət maşınına çevirir. Bu maşın await-a çatdıqda metodun vəziyyətini saxlayır.
  5. Davametmə: Gözlənilən tapşıq tamamlandıqda, icra mühiti qalan hissənin (davamın) icrasını planlaşdırır, bu ya işçi axınından və ya tutulmuşsa, eyni sinxronizasiya kontekstində.
  6. İdarəetmənin geri qaytarılması: Asinxron əməliyyat tamamlandıqdan sonra, idarə await-dan sonra nöqtəyə geri qaytarılır və metodun icrası saxlanmış vəziyyətlə davam edir.
// Asinxron metod
async Task<int> GetLengthAsync(string url)
{
    // HTTP müştərisi yaradılır
    using var client = new HttpClient(); 
    // URL-ə asinxron sorğu göndərilir
    // Await sorğunun tamamlanmasını gözləyir, işçi axını bloklamadan
    string content = await client.GetStringAsync(url); 
    // Davam, məzmun alındıqdan sonra icra olunur
    return content.Length; 
}

// Asinxron metoddan istifadə
async void Button_Click(object sender, EventArgs e)
{
    // Await GetLengthAsync-in bitməsini gözləyir
    // UI-axını bloklamır
    int length = await GetLengthAsync("https://example.com"); 
    // UI elementini yeniləyir
    Label1.Text = $"Məzmunun uzunluğu: {length}"; 
}