C# ile ASYNC ifadesi – Asenkron Metod Çalıştırma –

0
Want create site? Find Free WordPress Themes and plugins.

Herkese merhaba. Bu yazıda sizlere C# ile Async ifadesinden bahsedeceğim. Bu metod ile çalıştırılan bir metodun dönmesini beklemeden yeni metodları çalıştırabileceğiz. Şimdi konumuza geçelim.

Async, await ifadeleri: Bazı metodlar çalışma esnasında yaptığı işlemin sonucunu hemen döndüremezler. Belki harici dosyalar ile çalışan bir metoddur. Bunu ben bilemem. Fakat bu sebepten dolayı işlemini yavaş bitirebilir. Diğer metodun bu metodu beklediğini düşünelim ve programımızı nasıl yavaşlatacağını düşünelim. İşte bu yüzden fonksiyonlarımızı tanımlarken ASYNC ifadesi ile asenkron bir şekilde çalışmasını sağlarız.

Async metodunun bir diğer faydası ise çalışma esnasında diğer metodları bloke etmemesidir. Yani diğer metodların çalışmasını engellemesidir. Çünkü döndürdüğü değerler diğer metodları ilgilendirmez.

Genellikle void ifadeler async olarak tanımlanır fakat int string bool gibi ifadelerde async olarak tanımlanabilir.

Şunuda unutmamak gerekir ki bir async fonksiyonun çerisinde await ifadesi yoksa eğer o metod yine senkronize bir şekilde çalışır. Mutlaka içerisine await ifadesini koymalıyız.

Şimdi bir örnek yapalım ve bu örnekte async ve await ifadelerini kullanarak bir asenkron metod oluşturalım.

 

İlk olarak bir fonksiyon oluşturalım ve onu çalıştılarım. Daha sonra o fonksiyonun işlemini bitirmesini bekleyelim.

Bundan sorna program çalışırken ekrana mesajlar verdirelim. Bu mesajlar sayesinde metodumuzun çalıştığını greileceğiz. Mesajları verdirmemizin amacı bu metodların çalıştığını görmek zaten.

Async bir metod oluşturalım ve bu metod çalışmaya başlasın ve asenkron olarak işlemine devam etsin ve işlemini yapsın.

Bu metod ile bir dosya yazdırve okuma işlemi yapalım ki nasıl çalıştığını görelim. Şimdi aşağıdaki kodları dikkatlice takip edelim.

Bu uygulama .Net framewordk 4.5 versiyonu ile yapılmıştır.

 


Bu programda yavaş çalışacak olan fonksiyon işlemini bitirinceye kadar program kapanmaz çünkü programın kapanması için o metodun bitirilmesi gerekir. Fakat o sonraki fonksiyon o fonksiyonun bitmesini beklemez. Çünkü asenkron olarak çalışıyor ve içerisinde await anahtar kelimesi bulunmakta. Bu sayede metodlarımızı asenkron olarak çalıştırarak metodları birbirini beklemeden çalıştırmayı başarıyoruz.

Normal yollarda normal metod oluşturma yöntemiyle bu işlemi yapamayız. Çünkü normal metod yönteminde metodlar çalışma sırasına göre birbirini beklemek zorundadır.
Bu yöntemin amacı programın satırlarının birbirlerini beklemeden işlevlerini hızlı bir şekilde bitirmesidir. Bu sayede programın çalışırken daha hızlı işlev görmesidir. Bu çalışma sistemi C# içerisindeki delegate sistemine benzer. Delegate mantığı ile fonksiyonları farklı delegate nesneleri ile farklı treadlar aracılığı ile çalıştırabiliyoruz. Bu şekildede fonksiyonlar birbirlerini beklemezler. Çünkü çalıştırıcı delegate nesneleri farklı delegate nesneleridir.

 

Asenkron çalışma mantığında programın donmaları engellenir. Bazen while döngülerinde program donar ve cevap vermez. Fakat asenkron çalışma ile program donmaz ve çalışmasına devam eder.

Aşağıdaki program ile tekrar bir inceleme yapalım ve sonuçları görelim…


Console uygulamalarında main metodu kesinlikle ve kesinlikle async olarak tanımlanamaz. Çünkü Main fonkiyonu programın ana fonkiyonu main fonksiyonudur. Bu fonksiyon async olamaz. Koymaya çalışırsanız programda hata alırsınız. Program çalışmaz.
  • Async ve await ifadeleri programın içerisindeki kodların asenkron bir şekilde çalışması için gereken bir düzendir. Syntax olarak bibirlerine bağlıdırlar. Kodların okunmasını ve çalışmasını kolaylaştırırlar.
  • Async ve await ifadeleri ile programımızda daha karmaşık kodları daha hızlı bir şekilde çalıştırabiliriz. İşlemleri asenkron olarak çalıştırırken hata felan alırsak visual studio zaten bize uyarı verecektir. Bizde hatamızı düzeltiriz.
  • StreamReader gibi metodları çalıştırırken içeride await ifadesini bulundurmamız gerekmektedir. Bu ifadeyi bulundurmazsak program istediğimiz asenkron metodları çalıştırmayacaktır.
  • Metodların içerisine girmesi için async olarak kullanmak gerekir. Async metodların çalışması içinde kullanılırken await ifafadesini bulundurmamız gerekmektedir.
  • Normal metodlarda asenkron metod olarak kullanılabilir.
  • Şunu belirtmek isterim. Asenkron çalışma aynı anda birden fazla işlem yapabiliyor diye multi thread olarak anlaşılmamalı. Kod tek bir thread içerisinde asenkron bir şekilde çalışır. Fakat multi thread kodlarda birden fazla thread bulunmaktadır.
  • Task.Run metodunu kullanarak metodları Multi Thread Mantığı ile çalıştırma imkanının olduğunuda belirtmek isterim. Fakat yinede söylüyorum asenkron çalışma multi thread değildir.
  • Aynı thread içerisinde birden fazla metod çalışır. Bu metodlar birbirlerini beklemeden işlemini yapabilir.
  • Asenkron çalışma sayesinde başka threadlar oluşturmadan multi thread mantığı ile işlem yapmamıza olanak tanır. Bu sayede programımızı multi thread kullanıyormuşçasına hılı çalıştırabiliriz. Fakat bu işlem yine tek bir thread içerisinde olur.

 

Bu yazımızda bu kadar arkadaşlar

Takipte Kalın

İyi Çalışmalar

Burak Hamdi Tufan

Did you find apk for android? You can find new Free Android Games and apps.
Share.

About Author

Ben Kocaeli üniversitesi Uçak Elektrik Elektronik Bölümü Okuyorum. Bununla Birlikte 9 Yıldır yazılımcılık Yapıyorum. 12 Farklı Dilde ve 6 Farklı Platformda Profesyonel Yazılımlar Geliştirebiliyorum. Yazılım Benim için Hobi Değil Yasaşm Tarzıdır. Bu işten Para Kazanmak Değil Zevk Almak İçin Yapıyorum. Bu yüzden yazılım dünyasından ayrılmak istemiyorum.

Leave A Reply