İlkay İlknur

just a developer...

C# 5.0 & VB.NET 11.0 Asenkron Programlama 5N1K (Ne,nerede,ne zaman,nasıl,neden,kim)

Merhaba Arkadaşlar, “İşte geldik yine bir C# & VB.NET V.Next yazımıza daha :) Sanki daha dün C# 4.0 ile beraber gelen dynamic özelliğini incelliyor gibiydik. Teknoloji durmadan gelişiyor. Neyse konumuza dönelim“

BUILD konferansıyla beraber  Windows 8 ile artık kullanıcı deneyimlerinin oldukça değiştiğini görmekteyiz. Eskiden kullandığımız kullanıcı arayüzleri ile şu anda kullandığımız kullanıcı arayüzleri aslında oldukça fark var :) Tabi bunda artık sayısı oldukça artan dokunmatik cihazların da payı bulunmakta. Değişen kullanıcı arayüzleriyle beraber geliştirilen uygulamaların yapısı ve davranışları da değişim göstermekte.

Eskiden yazdığımız uygulamalarda network yoğun veya I/O yoğun işlemleri gerçekleştirirken uygulamamızın arayüzü bir süreliğine kilitlenirken artık günümüzde kullandığımız altyapıların da nimetlerini kullanarak bu işlemleri genelde ayrı bir thread’e alarak bu yoğun işlemi UI thread’ten alıyoruz ve arayüzün kullanıcının hareketlerine  sürekli olarak cevap verebilmesini sağlayabiliyoruz. Yani işlemleri Asenkron olarak gerçekleştiriyoruz.

Kullanıcının deneyimini bu şekilde iyileştirirken şimdi bir de developer perspektifinden durumu inceleyelim :)

Developer Perspektifinden Asenkron Programlama

Şimdi gelin uygulama tarafında senkron ve asenkron kavramlarına WebClient tipi içerisinde bulunan DownloadString metodu ile göz atalım.

Senkron İşlem : WebClient tipi içerisinde bulunan DownloadString(…) metodunu çağırdığımızda senkron bir işlem gerçekleştirmekteyiz. DownloadString metodunun çalışma süresi boyunca uygulama metodun işlemini bitirmesi için beklemekte ve işlem bittikten sonra uygulama akışı devam etmektedir.

Asenkron İşlem : WebClient tipi içerisinde bulunan  DownloadStringAsync(…,Action<string> callback) metodu ise asenkron olarak çalışmakta. Metot çağırıldığı anda işlem başlatılmakta ve kontrol hemen metot çağırımı yapan kısma geri dönmekte ve böylece uygulama kaldığı yerden işlemlere devam edebilmektedir. Burada aklımıza gelen soru ise şu olmakta: “Peki işlemin tamamlandığını nasıl anlayabiliyoruz ? ” Bunun için de DownloadStringAsync metodu içerisine bir callback’i parametre olarak geçiriyoruz ve asenkron işlem tamamladığında uygulama doğrudan bu callback metoduna düşüyor ve bizlerde işlemin bittiğinden haberdar olabiliyoruz.

Eğer daha önce bu şekilde asenkron geliştirmelerde bulunduysanız callback kullanarak uygulama geliştirmek bazen acı çektirebiliyor bizlere. Lambda ifadeleriyle callback tanımlamak biraz daha kolay hale gelse de yaptığımız ayrı ayrı tanımlamalarla kodumuzu okunması ve anlaşılması zor bir hale getiriyoruz.

Yani Senkron programlama yaparken sahip olduğumuz rahatlığa asenkron programlama yaparken sahip olamıyor(duk)uz.

C# 5.0 & VB.NET 11.00 Ana Tema => Asenkron Programlama

Veee evet C# ve VB’nin gelecek versiyonlarının teması Asenkron programlama olarak belirlendi. Geçtiğimiz sene ilk olarak PDC’de duyurulan Asenkron programlama yapısı bu sene BUILD konferansında yapılan C# 5.0 ve VB.NET 11.0 duyurularıyla beraber artık adından daha da fazla söz ettirir oldu. :)

Yeni versiyonlarla beraber hayatımıza async ve await adında 2 adet yeni keyword giriyor olacak. Bu keywordler ile beraber asenkron işlemlerimizin orkestrasyonunu tıpkı senkron bir şekilde kod yazar gibi sağlayabiliyor olacağız. Geri kalan tüm işleri ise artık compiler tarafına bırakıyor olacağız. Compiler gerekli durumlarda yaptığımız bildirimlere göre arka planda kodumuzu değiştirerek gerekli eklemeleri yapıyor olacak.

Async & Await  Asenkron İşlemler Yapabilmek İçin Değil !!! Asenkron İşlemlerin Orkestrasyonu İçin Kullanılır.

Doğabilecek kafa karışıklıklarının önüne geçmek için yukarıdaki cümleyi iyi bir şekilde okumamızda fayda var. Çünkü metodunuzun başına async keywordünü koyarak o metodu asenkron yapamayacaksınız. :) Zaten elimizde bir işlemi asenkron bir şekilde çalıştırmak için .NET Framework 4.0 ile gelen bir Task tipi bulunmakta diyerek hiç kod paylaşımı yapmayacağım bu yazıda ufak tefek ipuçlarını da sizlerle paylaşıyorum :) .

NET Framework 4.0 ile beraber gelen en büyük yeniliklerden birinin de parallel programlama yenilikleri olduğunu düşünürsek compiler tarafında yapılan bu yeniliklerle özellikle artık uygulama geliştirme tarafında concurrent programlama kavramlarının daha da popüler olacağını söylemek herhalde yanlış olmayacaktır. Böylece hem birim zamanda daha fazla iş yaparak CPU’ları daha etkin bir şekilde kullanırken hem de uygulama arayüzlerinin cevap verebilir(responsive) olmasını sağlayabilir duruma geliyor olacağız.

Yazımı Build konferansında Anders Hejlsberg’in yaptığı sunumda kullandığı bir cümle ile bitiriyorum. :)

Bu kısa yazımızda C# ve VB’nin bir sonraki sürümüyle beraber gelecek ana yenilikleri hiç kod kısmına girmeden tamamen high-level olarak bu yazıda sizlere sunmayı hedefledim.

Umarım faydalı bir yazı olmuştur .

Sonraki yazılarımızda artık kod tarafına girerek Async özelliklerini incelemeye başlıyor olacağız. ;)

Hoşçakalın,



Yorum Gönder