C#

C# ile Asenkron Programlama

5/5 - (2 votes)

Merhaba bu yazımızda C# asenkron programlama konusundan bahsedeceğiz.

Asenkron programlamayı günlük hayatımızdan bir örnek ile açıklarsak ; Örneğin :

Yemek yemeyi düşünüyorsunuz ve arkasından çay keyfi yapmayı 🙂 Yemek pişireceksiniz , yemeğiniz için kullanacağınız malzemeleri yıkamak istiyorsunuz hemde çay demlemek istiyorsunuz. Çay için su kaynatmayı mı önce yapardınız yoksa malzemeleri yıkayıp , doğramayı mı ? Çay suyunu ocağa koyup kaynatmayı dediğinizi duyar gibiyim.  Çay suyunuz koydunuz sonra malzemeleri doğrarken çaydanlık fokurdamaya başladı. Ne yaparsınız ? Kaynama mesajı aldığınızda elinizdeki doğrama işini bırakıp çayı demler, sonra hemen geri doğrama işine dönerdiniz değil mi ? Öyleyse “çayı demleme esnasında”  asenkron çalışmış oluruz.

Programlama dünyasında yanlış anlaşılan bir konuya açıklık getirerek başlayalım. Multithread ile asynchronous aynı şeyler değildir. Task ‘lar asenkron olarak yürütüldüğünde, görev bittiğinde Main Thread ‘e bittiğine dair mesaj ulaştırılır.  Asenkron yürütme işleminde Task işletim sisteminin ihtiyacına göre başka bir thread’e görev olarak atanabilir (I/O veya CPU tabanlı için farklı davranabiliyor OS). İster Main Thread ister başka thread , asenkron görevin bitmesinin hemen ardından mesaj Main Thread’e gönderilecektir. Bu andan sonra Main Thread çalışmaya dahil olacaktır. Thread işlemlerinde ise özel thread sınıfları veya thread.join ile bekleme işlemi veyahut event döndürerek ana thread üzerinden alabilirsiniz.

 

 

Ufak bir uygulama ile asenkron programlamayı inceleyelim.

Örneklerinizi Form üzerinde ismi Async olan formu ile yaptığınızı düşündüğümüzde ;

Output :

Main Thread Id:9
6 Id li thread ASYNC
6 Id li thread ASYNC

erkanerkan

 

 

Yukarıdaki programda btnDo butonuna basıp sonra hemen btnAdd butonuna bastığınızda; program 10 saniye arka planda bekler , ama beklerken ekran donmaz , listeye de ekleme yapar. 10 saniye sonra Task biter ve await komutu verilen kodun altından kod devam eder.

Normal senkron ortamda , BtnDo ya bastığınızda ekranınız donar, 10 sn sonra işlem bitince ekran donması geçerdi. Daha sonra siz BtnAdd butonuna basıp listeye ekleme yapabilirdiniz:) Gitti 10 sn boşa 😀

 

Başka bir örnek daha yapalım , ve konuya daha anlaşılır hale getirelim.

 

 

Yukarıdaki örnekte BtnDo butonuna bastığınızda GetJson() methodu çalışır, datayı çeker  ve Mesaj ekranı ile ekranı Modal hale getirir. O da ne , ekran donmadı ve arkaplanda textbox kutusuna hesaplanan değer yazıldı. Senkron mantığa göre Mesaj kutusu kapatılmadan o textbox kutusuna veri yazılamazdı oysaki, görüyorsunuz değil mi ne zahmetlerden kurtuluyoruz. 🙂

 

 

Senkron, Tek Thread : Aynı anda tek iş

Asenkron , Tek Thread :İşçi görevi arka planda işleyecek hale getirir, görev bittiği uyarısını aldığında elindeki işi duraklatır, hemen biten işin arkasından ne yapması gerekiyorsa onu yapar.

Asenkron MultiThread : Görevler arka planda bir çok işçiye dağıtılır, sonuçlar ayrı ayrı üretilir,hesaplanır, kaynaklar, alet ve araçlar herhangi bir çatışmaya karışıklığa izin verilmeden düzenlenir.

 

Benzer Yazılar:



This post has been seen 2222 times.
Be the First to comment.

Leave a Comment

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir