C# Asenkron Programlama (Async/Await)

Modern uygulamalarda uzun süren işlemler (dosya okuma, web sitesinden veri çekme vb.) sırasında arayüzün donmaması gerekir. Asenkron programlama, bu işlemlerin arka planda yapılmasını sağlayarak uygulamanın tepki vermeye devam etmesine olanak tanır.

1) Anahtar Kelimeler: Async ve Await

  • async: Bir metodun asenkron olduğunu ve içinde await kullanılabileceğini belirtir.
  • await: Asenkron işlemin sonucunun beklenmesini sağlar ancak bu sırada ana iş parçacığını (thread) serbest bırakır.
  • Task: Yapılacak işi temsil eden nesnedir. Geriye değer dönmüyorsa Task, dönüyorsa Task<T> kullanılır.

Kod Örneği: Web'den Veri Çekme

C# Async/Await Example
public async Task<string> VeriGetirAsync() {
    HttpClient client = new HttpClient();
    
    // İşlem bitene kadar bekler ama ana thread'i kilitlemez
    string sonuc = await client.GetStringAsync("https://api.ornek.com/veriler");
    
    return sonuc;
}

// Çağrılışı
public async void Buton_Click(object sender, EventArgs e) {
    lblDurum.Text = "Yükleniyor...";
    string veri = await VeriGetirAsync();
    lblDurum.Text = "Veri Alındı!";
}
⚠️ Altın Kural: "Async all the way"
Eğer bir metod asenkron ise, onu çağıran metodun da asenkron olması ve await ile beklemesi önerilir. .Result veya .Wait() gibi senkron bekletme yöntemleri "Deadlock" (kilitlenme) sorunlarına yol açabilir.

Özet

  • Asenkron kod, uygulamanın daha akıcı (smooth) çalışmasını sağlar.
  • Sunucu taraflı uygulamalarda aynı anda daha fazla isteğe yanıt verilebilmesini sağlar (Scalability).
  • İşlem bittiğinde kontrol otomatik olarak kaldığı yerden devam eder.