C# ile Async/Await: Asenkron Programlamaya Başlangıç
C#'ta asenkron programlama, uzun süren işlemleri (veritabanı sorguları, API çağrıları, dosya okuma) uygulamanın donmasını engelleyerek gerçekleştirmenin yoludur. Async/await anahtar kelimeleri bu işi basit hale getirmiştir.
Async metod, çalıştığı sırada diğer işlemlerin devam etmesine izin verir. Task döndüren bir metodu async olarak tanımlarsınız ve içinde await kullanarak asenkron işlemleri beklersiz.
1public async Task<string> VerileriIndir(string url)2{3using (HttpClient client = new HttpClient())4{5string veri = await client.GetStringAsync(url);6return veri;7}8}910// Kullanım11await VerileriIndir("https://api.example.com/data");Burada GetStringAsync asenkron olarak çalışır ve sonuç gelene kadar await bekler, ama thread serbest kalır.
Async metodu çağırırken await kullanmamak sık yapılan bir hatadır. Eğer sonucu beklemeniz gerekiyorsa mutlaka await yazın. Ayrıca Main metodunu async yapamadığınız için (eski sürümlerde), Task döndüren bir metodu çağırıp.Result ile beklemeyin, deadlock riski oluşur.
I/O işlemleri (network, disk, veritabanı) için ideal. CPU-yoğun hesaplamalar için değil. Örneğin bir web uygulamasında birden fazla API çağrısını paralel yapmak için Task.WhenAll kullanabilirsiniz.
1var task1 = VerileriIndir("url1");2var task2 = VerileriIndir("url2");3await Task.WhenAll(task1, task2);Async/await modern C# yazmanın temelini oluşturur. Doğru kullanıldığında uygulamanızın performansı ve duyarlılığı önemli ölçüde artar.
5 yorum
aynen işte, uzun işler sırasında uygulamanın dondurmasını engellemek için bu lazım.
veri çekme işi yapıyorsun mesela o sırada kullanıcı başka şeyler yapabilsin diye lazım yoksa ekran donduktan sonra kimse seni kullanmaz zaten
ama çoğu yerde hala synchronous yazılı kodu görüyorum geçiş yapmak zor oluyor heralde
geçiş yapmanın zor olmasının bir sebebi de var mı, yoksa sadece alışkanlık mı?
geçiş zor çünkü eski kodda heryerde try-catch bloğu var, error handling değişiyor.