1. Ana Sayfa
  2. ASP.Net
  3. Kavramlarla ASP.Net WEB API Nedir ? – Bölüm 2

Kavramlarla ASP.Net WEB API Nedir ? – Bölüm 2

1

Önceki makalemizde Web API hakkında temel kavramlara değinmiştik. Bu bölümde ise mimarisinin neler içerdiği hakkında fikir sahibi olacak ve API’ de sıklıkla kullanılan yapılardan hakkında giriş seviyesinde bilgi edineceğiz.

Web API içerisinde sıklıkla kullanılan yapılardan bir tanesi de paralel programlama konseptleridir. Web API konusunu kavramlarla açıkladığımız makale serimizde paralel programlama ile ilgili olarak bilinmesi gereken basit iki ayrım noktasını da belirtmekte yarar görüyorum.

Resim-1

Paralel programlama denince herkesin aklına eminim ilk gelen terim Thread olmuştur. Microsoft .Net kütüphaneleri içerisinde de 4.0 versiyonuna kadar paralel işlemlerde başvurduğumuz kaynak Thread olmuştur. Thread .Net platformu için özel olarak hazırlanmış sınıfları içermektedir. Thread’ler kullanımı ile ilgili kontrolü geliştiriciye bıraktığından geliştiriciler kontrol edilebilirlik açısından dikkat edilmesi gereken yapılar haline gelmişlerdir. Bunu biraz açarsak bir iş yapılacağı zaman Thread kullanıldığında aynı anda yapılması gereken diğer iş için verilecek refleksi Thread kendisi belirlemeyip geliştiricinin kontrol etmesini bekleyebilir. Bu süreç bellekteki işlemi sıraya koyma da olabilir, bekleyen Thread’i sıraya alma işlemi de olabilmektedir. Thread yapılacak olan bir işlemde bu işleme özel yeni bir Thread oluşturulmasını garanti etmeyebilir veya oluştursa dahi bu Thread’i o işlem esnasında kullanacağı konusunda kesinlik vermeyecektir.

ThreadPool yine Microsoft .Net platformu tarafından bize sunulmaktadır. Thread’ lerden farkı ise kullanım esnasında kontrolün tamamen geliştiriciye bırakılması yerine kütüphane tarafından bazı kısıtlar getirilerek kontrol edilmektedir.  ThreadPool, Thread’in aksine yeni bir işlem için yeni bir Thread oluşturacağını ve bunu kullanacağını garanti etmektedir. Yani paralel olarak yapılmasını istediğimiz bir iş için ThreadPool kullanılması durumunda Framework yani kütüphanemiz bizi boru hattındaki diğer işlemlerle beraber sıraya koyacak ve tüm kontrolü elinde tutacaktır. ThreadPool, kontrolü elinde tutarken işlem sırasındaki Thread’ i işleme alıp anında görev olarak atayacak ve işlemin süreçteki en optimum sürede tamamlanmasını sağlayacaktır.

Resim-2

 

WEB API’ lerde sıklıkla kullanılan özellikle Microsoft geliştirici kütüphanesinde .Net 4.0 ve üzeri konuları çalışanların karşılaştıkları diğer bir konu da Task’ lerdir. Task’ ler paralel işlemlerin nesnelleştirildiği bir sınıftır. Task’ in işletilmesi ThreadPool sınıfı ile gerçekleşir. Task’ ler System.Threading isim uzayı (namespace) altında bulunurlar. Task kullanırken arka tarafta bir Thread oluşuyor diyemeyiz fakat arka tarafta işlem Abstract yani soyut bir sınıf olan TaskScheduler tarafından gerçekleşmektedir. Bu sınıfın arkasında ise ThreadPool vardır buradan hareketle az önce de belirtildiği gibi bir Task’ in yürütülmesi işini ThreadPool üstlenmektedir. Eğer zaten işlemi arka tarafta ThreadPool yapıyor ise niçin Task’lere ihtiyaç duyduğumuz düşünülebilir. Elbette önceki başlıkta açıkladığımız gibi doğrudan ThreadPool da kullanabiliriz ancak Task kullanmamız durumunda süreçteki işlemin bitiş zamanını, iptale düştüyse niçin ve nerede iptale düştüğünü hatta bir hata olması durumunda exception durumu hakkında bilgi sahibi olabilmekteyiz. Bu yüzden Task kullanımı daha efektif olmaktadır.

Resim-3

Task içerdiği bu bilgilerin yanı sıra ContinueWith(), Wait(), WaitAll(), StartNew() gibi metotlar içermektedir.

StartNew( )

Yeni bir Task oluşturmak için StartNew( ) metodu kullanılmaktadır. Aşağıdaki kod örneklerinde yeni bir Task oluşturulması gösterilmiştir.

 

Task.ContinueWith( ) – Task.Wait( ) –  WaitAll( )

Oluşturulan bir Task’ in sonucuna göre bir başka Task’ in işlem yapması gerekebilir. Devam eden Task’ e göre işlem yaptırılan Task özelliği ContinueWith( ) ile verilir. Örnek ile daha iyi anlayabilmek için aşağıdaki kodları inceleyelim.

// Önce yeni bir Task oluşturuyoruz.

 

Burada yapılmak istenen ikinci Task’ in oluşturulması ilkinden farklı olarak StartNew( ) metodu ile değil birinci Task’ in ContinueWith( ) metodu ile oluşturulmasıdır. Örnek olması açısından gerçek bir işlem yaptırmayıp iki metot içerisinde de hesaplama işlemi yapılıyormuş gibi bir kurgulama yaptım. Yani ilkinin sonucuna göre ikincinin sonucunun hesaplanması gibi bir şey düşünülebilir.  İlk Task bittiğinde diğeri ile devam etmesi gerektiğini belirtiyor bununla da ilk Task’ in kesinlikle doğru bir biçimde çalışacağı ve tamamlanacağı hakkında feedback vermiş oluyoruz.

Wait( ) metodu ile de Task’ ler içerisinde yapılan işlemlerin bekletilmesi yani beklemeye alınması sağlanmaktadır. Yukarıdaki kod örneğimizde ikinci Task bittikten sonra işlemi görebilmek amacıyla ikinciTask.Wait( ) şeklinde bir kod eklemesi yapılabilirdi. Bu örnekte olduğu gibi birbirine bağımlı işlem yapan Task’lere bağımlı yani Linked Task denilmektedir.

Eğer Task’ ler birbirlerine bağımlı olmayan ve aynı anda gerçekleştirilmesinde problem teşkil etmeyen yapıdalarsa böyle bir durumda WaitAll( ) metodu kullanılmalıdır. İşlemlerin çalışma zamanında birbirlerinden bağımsız bir şekilde ve aynı anda yürütülmesini istediğimiz durumlarda WaitAll ( ) metodu kullanılmaktadır. TaskAll ( ) metodu kullanımına ilişkin şöyle bir senaryo düşünebiliriz örneğin çok sayıda görevin yürütüldüğü bir süreçte her birini alakadar eden sonuçları ekrana yazdırmamız gerekiyor fakat her birinin bitip bitmediğinden emin değiliz. Böyle bir durumda Task’ lerin oluşturulması tamamlandığında tüm süreçler ile ilgili işlemleri Task.WaitAll metoduna gönderir ve hepsinin bittiğinden emin oluruz.

Bu makalemizde ASP.NET WEB API uygulamalarında sıklıkla kullanılan Thread, ThreadPool ve Task yapılarını inceledik. WEB API oluşturma bölümüne geçmeden önce bilmeyenler için konunun önemini bilenler için ise kısa bir hatırlatma yapmış olduk. Thread ve Task hakkında bilinmesi gereken çok fazla detay vardır fakat makalemizde C# programlama dili konseptlerine girmemek ve konu bütünlüğünden çok fazla çıkmamak adına yazı dizimizin bu bölümünü burada sonlandıralım.

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

 

Referanslar

www.mshowto.org

https://programmium.wordpress.com/2016/04/02/c-understanding-threads-and-threadpools/

https://social.msdn.microsoft.com/Forums/tr-TR/home

https://stackify.com/java-thread-pools/

 

TAGs: asp.net, asp.net web servisasp.net web API, API, , , , Thread, ThreadPool, Task, , , Paralel Programlama, Asenkron Programlama, Görevler

 

Yorum Yap

Yazar Hakkında

Elektrik Bilgisayar Mühendisliği Tezli Yüksek Lisans programı mezunuyum. Konya Ticaret Odası Karatay Üniversitesi Bilgi Teknolojileri Araştırma Uygulama Merkezinde 2016 yılı itibariyle bilgisayar mühendisi olarak çalışmaktayım.  Başlıca uzmanlık alanlarım arasında Asp.Net Web Forms, Asp.Net MVC, C# ve SQL Server gelmektedir. Milli Eğitim Bakanlığı bünyesindeki eğitim merkezlerinde bilgi teknolojileri ve yazılım konularında öğreticilik ve danışmanlık yaptım. Çeşitli AB destekli projelerde yazılım sorumlusu olarak görev aldım. Çalışmalarımı Secure Design Pattern, Yazılım Güvenliği, Linux, Cisco, Huawei CLI, .Net Core, Siber Güvenlik, Windows Sunucu Yönetimi ve bilgi güvenliği yönetim sistemi konularında ilerletmekteyim. Asp.net ile proje geliştirme isimli kitabın yazarıyım.

Yorum Yap