C# ile Asenkron Programlama (Async/Await) - Csharp Eğitim Dünyası haber yazılımı

Top Ad unit 728 × 90

Konularımız

random
[post_ad]

C# ile Asenkron Programlama (Async/Await)

C# Programlama Diline Giriş: Başlangıçtan Uzmanlığa Adım Adım Rehber

c# asenkron programlama

Asenkron Programlama (Async/Await) Nerelerde Kullanılır:

Gelişen teknoloji ve artan veri işleme ihtiyaçlarıyla birlikte, asenkron programlama (Async/Await) kullanımı giderek önem kazanmaktadır. Bu başlık altında, asenkron programlamanın hangi durumlarda etkili olduğu ve nerelerde kullanıldığı ayrıntılı bir şekilde incelenecektir.

  • Uzun süreli işlemler: Veritabanı sorguları, API çağrıları, dosya işlemleri gibi uzun süreli işlemleri asenkron hale getirerek uygulamanızın yanıt verme süresini iyileştirebilirsiniz.
  • Kullanıcı etkileşimi: Kullanıcı arayüzünün donmadan akıcı bir şekilde çalışmasını sağlamak için kullanıcı etkileşimi ile ilgili işlemleri asenkron olarak gerçekleştirebilirsiniz.
  • Olay tabanlı programlama: Olaylara dayalı programlama modellerinde asenkron programlamaa, daha verimli ve ölçeklenebilir bir kod yazmanıza imkan verir.
  • Çoklu görev: Birden fazla işlemi aynı anda çalıştırarak işlemcinizin ve diğer kaynaklarınızın daha verimli bir şekilde kullanılmasını sağlayabilirsiniz.

Asenkron Programlama (Async/Await) Avantajları Nelerdir:

Asekron programlama, birçok avantaj sunar ve bu avantajlar, yazılım geliştirme süreçlerini daha etkin ve performanslı hale getirir. Bu başlık altında, asenkron programlamanın sağladığı avantajlar detaylı bir şekilde açıklanacaktır.

  • Uygulama yanıt verme süresini artırır: Uzun süreli işlemleri asenkron hale getirerek uygulamanızın donmadan akıcı bir şekilde çalışmasını sağlayabilirsiniz.
  • Kullanıcı deneyimini iyileştirir: Kullanıcı arayüzünün donmadan yanıt vermesi, kullanıcı deneyimini önemli ölçüde iyileştirir.
  • Performansı artırır: İşlemlerin paralel olarak çalışmasını sağlayarak işlemcinizin ve diğer kaynaklarınızın daha verimli bir şekilde kullanılmasını sağlar.
  • Kodun okunabilirliğini ve sürdürülebilirliğini artırır: Asenkron kodlar, senkron kodlara göre daha okunabilir ve sürdürülebilirdir.

Asenkron Programlama (Async/Await) Olmazsa Olmazlar Nelerdir:

Asenkron programlama, özellikle belirli senaryolarda olmazsa olmaz bir gerekliliktir. Bu başlık altında, asenkron programlamanın zorunlu olduğu durumlar ve bu durumları anlamak için dikkate alınması gereken faktörler ele alınacaktır.

  • Gerçek zamanlı uygulamalar: Gerçek zamanlı veri işleme ve güncelleme gerektiren uygulamalarda asenkron programlama olmazsa olmazdır.
  • Yüksek performanslı uygulamalar: Maksimum performans ve verimlilik gerektiren uygulamalarda asenkron programlama kritik önem taşır.
  • Mobil uygulamalar: Mobil cihazların sınırlı kaynaklarını daha verimli kullanmak için asenkron programlama önemlidir.
  • Web uygulamaları: Birden fazla kullanıcının aynı anda erişebileceği web uygulamalarında asenkron programlama, daha ölçeklenebilir ve performanslı bir çözüm sunar.

Asenkron Programlama (Async/Await) Neden Kullanmalıyız:

Geleneksel senkron programlamadan farklı olarak, asenkron programlamanın neden tercih edilmesi gerektiği konusunda bir anlayış oluşturmak önemlidir. Bu başlık altında, asenkron programlamanın kullanılmasının motivasyonları ve genel olarak neden tercih edilmesi gerektiği ele alınacaktır.

  • Geleneksel senkron programlama, uzun süreli işlemler nedeniyle uygulamanızın donmasına ve kullanıcı deneyiminin bozulmasına neden olabilir.
  • Asenkron programlama, uygulamanızın daha hızlı ve daha duyarlı olmasını sağlayarak kullanıcı deneyimini iyileştirir.
  • İşlemlerin paralel olarak çalışmasını sağlayarak işlemcinizin ve diğer kaynaklarınızın daha verimli bir şekilde kullanılmasını sağlar.
  • Kodun okunabilirliğini ve sürdürülebilirliğini artırarak kod geliştirmeyi ve hata ayıklamayı kolaylaştırır.

Async ve Await Temel Kavramları:

C# dilinde asenkron programlamaya giriş yaparken, async ve await anahtar kelimeleri karşımıza çıkar. Bu başlık altında, bu kelimelerin nasıl kullanıldığı ve asenkron metotların nasıl tanımlandığı ve çağrıldığı detaylı bir şekilde incelenecektir.

  • Async: Bir metodun asenkron olduğunu belirtir.
  • Await: Bir asenkron işlemin tamamlanmasını bekler.

Task ve Task Sınıfları:

Asekron programlamada, Task ve Task sınıfları önemli rol oynar. Bu başlık altında, bu sınıfların nasıl kullanıldığı ve birden çok asenkron işlemin nasıl yönetildiği konuları detaylı bir şekilde ele alınacaktır.

  • Task: Asenkron bir işlemin temsilini sağlar.
  • Task<T>: Asenkron bir işlemin sonucunu da içeren bir temsil sağlar.

Task.WhenAll Kullanımı

Task.WhenAll yöntemi, bir dizi Task'in tamamlanmasını bekler ve tamamlandıktan sonra bir Task döndürür. Bu yöntem, birden fazla asenkron işlemin tamamlanmasını tek bir noktada beklemek için kullanılır.

Kullanım Örnekleri: 
  • Birden fazla API çağrısını paralel olarak yapmak ve sonuçları bir araya getirmek. 
  • Birden fazla veritabanı sorgusunu paralel olarak çalıştırmak ve sonuçlarını işlemek.
  • Birden fazla dosya işlemini paralel olarak gerçekleştirmek ve tamamlanmasını beklemek.

Cancellation Token ve İptal İşlemleri:

Asekron işlemleri iptal etmek veya zaman sınırlaması eklemek için CancellationToken ve Task.Delay kullanımı oldukça kritiktir. Bu başlık altında, iptal işlemlerinin nasıl gerçekleştirildiği ayrıntılı olarak incelenecektir.

  • CancellationToken: Bir asenkron işlemin iptal edilmesini sağlar.
  • Task.Delay: Belirtilen süre kadar bekler.

Hata Yönetimi ve Exception Handling:

Her programda olduğu gibi, asenkron programlamada da hata yönetimi kritik bir konudur. try-catch bloklarının asenkron metotlarda nasıl kullanılacağı ve asenkron metotlardan gelen hataların nasıl yönetileceği bu başlık altında detaylı bir şekilde açıklanacaktır.

Parallel Programlama ve Async/await:

Asekron programlamada, paralel işlemleri yönetmek ve senkron/asenkron işlemleri birleştirmek oldukça önemlidir. Bu başlık altında, Parallel.ForEach ve Parallel.Invoke gibi araçlar kullanılarak asenkron işlemlerin nasıl yönetileceği ele alınacaktır.

I/O İşlemleri ile Çalışma:

Veritabanı işlemleri, dosya okuma/yazma gibi I/O işlemleri asekron programlamada sıkça karşılaşılan durumlardır. Bu başlık altında, bu tür işlemlerin nasıl asekron olarak gerçekleştirileceği detaylı bir şekilde anlatılacaktır.

Async Delegeler ve Lambda İfadeleri:

Func ve Action gibi delegate türleri ve lambda ifadeleri kullanarak asekron işlemleri ifade etmek, C# dilinde oldukça yaygındır. Bu başlık altında, bu ifadelerin nasıl kullanılacağı detaylı bir şekilde ele alınacaktır.

Async Main Metodu ve Console Uygulamalarında Kullanımı:

C# 7.1 ve sonrasında gelen async Main özelliği, console uygulamalarında asekron programlamanın nasıl kullanılacağını gösterir. Bu başlık altında, console uygulamalarında asekron programlamanın kullanımı detaylı bir şekilde açıklanacaktır.

Asenkron ve Senkron Kodları Birleştirme:

Asekron ve senkron kodları birleştirmek, bazen kaçınılmazdır. Task.Run gibi araçlar kullanılarak, senkron kodların asekron hale getirilmesi bu başlık altında detaylı bir şekilde anlatılacaktır.


Örnekler:

C# dilinde async ve await kullanarak bir örnek:


Bu örnekte, async anahtar kelimesi, DownloadContentAsync metodu içinde kullanılmıştır. await ise, asenkron bir işlemi beklemek ve sonucunu almak için kullanılmıştır. Bu örnek, bir HttpClient kullanarak web sayfasının içeriğini asenkron bir şekilde indirir. Main metodu içinde de asenkron bir şekilde çalışabilmesi için async anahtar kelimesi kullanılmıştır.

C# dilinde Task kullanarak bir örnek:

Task sınıfı, C# dilinde paralel ve asenkron programlama için kullanılan bir sınıftır. Task sınıfı, bir görevin paralel olarak çalıştırılabilmesini ve sonucunun izlenmesini sağlar. İşte Task ve bazı Task sınıfları kullanılarak yapılan bir örnek:



Bu örnekte, Task.Run ve Task.Factory.StartNew metotları ile paralel olarak çalışan iki farklı görev oluşturuluyor. Bu görevlerin sonuçları await kullanılarak bekleniyor ve toplam sonucu ekrana yazdırılıyor. Sum metodu ise bir işlemi temsil etmek için kullanılıyor ve bu metotlar paralel olarak çağrılarak çalıştırılıyor.


CancellationToken Kullanım Örneği:


CancellationToken, asenkron operasyonları iptal etmek için kullanılan bir mekanizmadır. İşlem sırasında bir iptal talebi olursa, CancellationToken kullanılarak işlem iptal edilebilir. İşte CancellationToken kullanarak basit bir örnek:


Bu örnekte, CancellationToken kullanarak bir asenkron görev oluşturuluyor. PerformTask metodu içinde, her adımda cancellationToken.ThrowIfCancellationRequested() çağrılarak iptal talebi kontrol ediliyor. Main metodu içinde ise CancellationTokenSource ile bir iptal talebi oluşturulup, Task.Run ile görev başlatılıyor. İşlem süresi 10 saniye (Thread.Sleep(1000) her adımda 1 saniye bekletiliyor) ve bu süre zarfında işlem iptal edilebilir.


C# Task.Delay Kullanım Örneği:

Task.Delay, belirli bir süre boyunca beklemek için kullanılan bir asenkron işlevdir. Bu metot, belirtilen süre kadar bekledikten sonra asenkron bir şekilde bir Task döndürür. İşte Task.Delay kullanarak basit bir örnek:


Bu örnekte, DelayExample metodu içinde Task.Delay kullanılarak 3 saniye boyunca bekleniyor. Main metodu içinde bu DelayExample metodu await kullanılarak çağrılıyor ve beklenildikten sonra program tamamlanıyor. Bu, özellikle belirli bir süreli bekleme gerektiren asenkron senaryolarda kullanışlı bir yöntemdir.


Hata Yönetimi ve Exception Handling Örnekleri

Asenkron programlamada hata yönetimi, geleneksel senkron programlamada olduğu gibi try-catch blokları kullanılarak gerçekleştirilir. Ancak, asenkron metotlardan gelen hataları yakalamak ve işlemek biraz farklılık gösterir. İşte C# dilinde asenkron hata yönetimi için kullanılan try-catch blokları ile ilgili bir örnek:



Bu örnekte, AsyncMethodWithError adlı asenkron bir metot, bir hata fırlatarak programın normal akışını bozar. Main metodu içinde bu asenkron metot çağrılır ve try-catch bloğu ile hatası yakalanır. catch bloğu, herhangi bir türdeki hataları yakalayabilir, ancak spesifik hataları belirtmek daha iyi bir uygulama geliştirmeye yardımcı olabilir. Dikkat edilmesi gereken bir diğer önemli nokta, asenkron metotlardan gelen hataların direk catch bloklarında işlenemeyebilir. Bu durumda, AggregateException adlı bir özel durumu ele almanız gerekebilir. Aşağıda, birden fazla asenkron görevin sonuçlarını beklerken oluşan AggregateException'ı ele almanın bir örneği bulunmaktadır:



Bu örnekte, Task.WhenAll metodu birden fazla asenkron görevin sonuçlarını beklerken, eğer bir veya daha fazla görev hata fırlatırsa AggregateException alınacaktır. catch bloğu içinde bu durumu ele alabilirsiniz.


WhenAll Kullanım Örneği :

Task.WhenAll yönteminin bazı önemli noktaları: 

  • Parametre olarak bir Task dizisi alır. 
  • Tüm Task'ler tamamlandıktan sonra bir Task döndürür.
  • Dönenen Task'in sonucu, parametre olarak verilen Task'lerin sonuçlarından oluşur.
  • Herhangi bir Task hata ile sonuçlanırsa, dönen Task de hata ile sonuçlanır. 
  • Task.WhenAll yöntemi ile birden fazla asenkron işlemi kolayca yönetebilir ve tamamlanmalarını tek bir noktada bekleyebilirsiniz.

Birden fazla web sitesinden veri almak:



Kod Açıklaması

GetWebsiteDataAsync metodu, HttpClient kullanarak bir web sitesinden kaynak kodunu alır ve string olarak döndürür.

using bloğu, HttpClient nesnesinin doğru şekilde kapatılmasını sağlar.

response.Content.ReadAsStringAsync yöntemi, web sitesinin kaynak kodunu bir string değişkene kaydeder.


Birden fazla dosya okumak:



Task.WhenAll yöntemi, asenkron programlamada oldukça kullanışlı bir araçtır. Birden fazla asenkron işlemi kolayca yönetmenize ve tamamlanmalarını tek bir noktada beklemenize olanak sağlar.

Hiç yorum yok:

All Rights Reserved by Csharp Eğitim Dünyası © 2023 - 2024
Powered By Ebubekir Bastama(EBS), Designed by EÇK Yazılım

İletişim Formu

Ad

E-posta *

Mesaj *

Blogger tarafından desteklenmektedir.