Sobes.tech
Middle

C#'ta async/await mekanizması nasıl çalışır?

sobes.tech yapay zeka

AI'dan gelen yanıt

async/await mekanizması, senkron gibi görünen asenkron kod yazmayı sağlar.

  1. Anahtar kelime async: Bir yöntemi asenkron olarak işaretler. Böyle bir yöntem await ifadesini içerebilir.
  2. Anahtar kelime await: Genellikle Task veya Task<T> döndüren bir asenkron işlemi çağırmadan önce kullanılır. await'a ulaşıldığında, kontrol çağıran metoda geri verilir ve serbest kalan iş parçacığı başka işler yapabilir.
  3. Task / Task<T>: Bir asenkron işlemin tamamlanması ve sonucu (Task<T> ise) vaat eder. await, bu "vaadin" tamamlanmasını "bekler".
  4. Durum makinesi: Derleyici, asenkron yöntemi bir durum makinesine dönüştürür. Bu makine, await noktasında yöntemin durumunu saklar.
  5. Devam: Beklenen görev tamamlandığında, çalışma zamanı kalan kısmın (devamın) yürütülmesini planlar, bu ya bir iş parçacığı havuzundan ya da yakalanmışsa aynı senkronizasyon bağlamında olur.
  6. Kontrolün geri dönüşü: Asenkron işlem tamamlandıktan sonra, kontrol await sonrası noktaya geri döner ve yöntemin yürütülmesi saklanan durumla devam eder.
// Asenkron yöntem
async Task<int> GetLengthAsync(string url)
{
    // HTTP istemcisi oluştur
    using var client = new HttpClient(); 
    // URL'ye asenkron istek yap
    // Await, isteğin tamamlanmasını engellemeden bekler
    string content = await client.GetStringAsync(url); 
    // Devam, içeriği aldıktan sonra yürütülür
    return content.Length; 
}

// Asenkron yöntemi kullanma
async void Button_Click(object sender, EventArgs e)
{
    // Await, GetLengthAsync'in bitmesini bekler
    // UI iş parçacığı engellenmez
    int length = await GetLengthAsync("https://example.com"); 
    // UI öğesini güncelle
    Label1.Text = $"İçeriğin uzunluğu: {length}"; 
}