crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
C# Asenkron Programlama: async ve await ile Performanslı Uygulamalar
Asenkron programlama, bir işlem devam ederken (örneğin internetten büyük bir veri inerken) uygulamanın diğer işlere devam edebilmesini sağlar. Bu, bir garsonun siparişi mutfağa ilettikten sonra yemeğin pişmesini beklemek yerine diğer masalara servis yapmaya devam etmesine benzer.
1. Senkron vs Asenkron: Temel Fark
[]Senkron (Sıralı): Her satır bir öncekinin bitmesini bekler. Eğer 3. satırda büyük bir dosya kopyalanıyorsa, uygulama o işlem bitene kadar "kilitlenir".
[]Asenkron (Eş Zamanlı): Uzun süren işlem arka planda başlatılır ve uygulama yanıt vermeye devam eder. İşlem bittiğinde sonuç ana hatta geri döner.
2. async ve await Nasıl Kullanılır?
C#'ta asenkron bir yapı kurmak için üç ana bileşene ihtiyacınız vardır:
[]async Anahtar Kelimesi: Metot imzasında kullanılır. Bu metodun içinde asenkron işlemler olacağını belirtir.
[]await Anahtar Kelimesi: Uzun süren işlemin önüne yazılır. "Bu işlem bitene kadar metodun geri kalanını beklet ama bu sırada ana işlemciyi meşgul etme" der.- Task Dönüş Tipi: Asenkron metotlar genellikle geriye Task (void yerine) veya Task<T> (bir değer dönecekse) döndürür.
C#:
public async Task VeriyiHazirlaAsync()
{
Console.WriteLine("İşlem başlatılıyor...");
// 3 saniyelik bir ağ işlemini simüle ediyoruz
await Task.Delay(3000);
Console.WriteLine("İşlem tamamlandı, uygulama hala akıcı!");
}
3. Task<T> ile Değer Döndürmek
Eğer asenkron işleminiz sonucunda bir veri bekliyorsanız Task<TResult> yapısını kullanmalısınız.
C#:
public async Task<string> WebVerisiIndirAsync()
{
using (HttpClient client = new HttpClient())
{
// İnternetten veri çekme işlemi (Asenkron)
string sonuc = await client.GetStringAsync("https://api.ornek.com/veri");
return sonuc;
}
}
// Çağırırken:
string veri = await WebVerisiIndirAsync();
4. Sık Yapılan Hatalar ve Altın Kurallar
[]Async all the way: Bir metot asenkron ise, onu çağıran metot da asenkron olmalı ve await ile çağrılmalıdır.
[]Void yerine Task: Olay yakalayıcılar (Event Handlers) hariç, asenkron metotlarda asla async void kullanmayın; hata yönetimini imkansız hale getirir. Her zaman async Task tercih edin.- İsimlendirme:** Asenkron metotların isminin sonuna Async takısı eklemek bir topluluk standardıdır (Örn: HesaplaAsync).
Sonuç
Asenkron programlama artık modern yazılım dünyasında bir seçenek değil, bir zorunluluktur. Kullanıcılar, arka planda veri işlenirken donan bir arayüzü asla kabul etmezler. async ve await sayesinde karmaşık "Thread" (iş parçacığı) yönetimiyle uğraşmadan, oldukça temiz ve okunabilir bir yapıyla bu sorunu çözebilirsiniz.