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
awaitkullanı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üyorsaTask<T>kullanılır.
Kod Örneği: Web'den Veri Çekme
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
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.