Asenkron Programlama
Asenkron Programlama, C# geliştirmede modern uygulamaların performans ve kullanıcı deneyimini artırmak için kritik bir yaklaşımdır. Geleneksel senkron programlamada uzun süren işlemler, örneğin veritabanı sorguları, web API çağrıları veya dosya işlemleri, uygulamanın ana iş parçacığını bloke eder. Bu durum, özellikle kullanıcı arayüzü uygulamalarında yanıt vermezliği ve performans sorunlarına yol açabilir.
C# dilinde asenkron programlama, async ve await anahtar kelimeleri ile Task ve Task
Bu eğitimde, okuyucu asenkron yöntemler oluşturmayı, paralel görevleri yönetmeyi ve gerçek dünya projelerinde bu kavramları uygulamayı öğrenecektir. Ayrıca C#'ın nesne yönelimli programlama prensipleri, veri yapıları ve algoritma optimizasyonlarıyla asenkron programlamanın nasıl entegre edileceği gösterilecektir. Sonuç olarak, yazılım mimarisi ve sistem tasarımı bağlamında asenkron programlamanın önemi vurgulanacaktır.
Temel Örnek
textusing System;
using System.Threading.Tasks;
namespace AsyncDemo
{
class Program
{
static async Task Main(string\[] args)
{
Console.WriteLine("Asenkron işlem başlatılıyor...");
string sonuc = await VeriAlAsync();
Console.WriteLine($"Alınan veri: {sonuc}");
Console.WriteLine("İşlem tamamlandı.");
}
static async Task<string> VeriAlAsync()
{
await Task.Delay(2000); // Uzun süren bir işlemi simüle eder
return "Asenkron dünyadan merhaba!";
}
}
}
Yukarıdaki örnekte, VeriAlAsync metodu async olarak tanımlanmış ve Task
Bu örnek, C# asenkron programlamanın temel kavramlarını gösterir: async/await kullanımı, görevlerin yönetimi ve program akışının korunması. Ayrıca C# isimlendirme standartlarına (PascalCase ve camelCase) ve iyi uygulamalara dikkat edilmiştir. Task.Result veya Task.Wait kullanımı, potansiyel deadlock riskleri nedeniyle tercih edilmemelidir.
Pratik Örnek
textusing System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
namespace AsyncDemo
{
class Program
{
static async Task Main(string\[] args)
{
List<string> urls = new List<string>
{
"[https://jsonplaceholder.typicode.com/posts/1](https://jsonplaceholder.typicode.com/posts/1)",
"[https://jsonplaceholder.typicode.com/posts/2](https://jsonplaceholder.typicode.com/posts/2)",
"[https://jsonplaceholder.typicode.com/posts/3](https://jsonplaceholder.typicode.com/posts/3)"
};
try
{
List<Task<string>> gorevler = new List<Task<string>>();
foreach (var url in urls)
{
gorevler.Add(UrlAlAsync(url));
}
string[] sonuclar = await Task.WhenAll(gorevler);
foreach (var icerik in sonuclar)
{
Console.WriteLine(icerik.Substring(0, Math.Min(50, icerik.Length)) + "...");
}
}
catch (HttpRequestException ex)
{
Console.WriteLine($"İstek hatası: {ex.Message}");
}
}
static async Task<string> UrlAlAsync(string url)
{
using HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
}
}
Bu örnek, birden fazla HTTP isteğinin paralel olarak gerçekleştirilmesini gösterir. Task.WhenAll kullanımı, tüm görevlerin tamamlanmasını beklerken performansı artırır. using ifadesi, HttpClient kaynaklarının doğru yönetilmesini sağlar ve bellek sızıntılarını önler.
Try-catch blokları, asenkron hataların güvenli şekilde yönetilmesini sağlar. Bu örnek, web uygulamaları, API istemcileri ve arka uç hizmetlerinde yaygın olarak kullanılan pratik bir deseni göstermektedir. OOP, algoritmalar ve kaynak yönetimi, asenkron programlamayla başarılı şekilde birleştirilmiştir.
C# asenkron programlama için en iyi uygulamalar şunlardır: async/await doğru kullanımı, async void yalnızca olaylar için, görevlerin yaşam döngüsünü yönetme, Task.WhenAll/WhenAny ile paralel görev yönetimi. Task.Result veya Task.Wait kullanımından kaçınılmalıdır.
Performans optimizasyonu için gereksiz thread yaratmaktan kaçınmak, HttpClient’ı yeniden kullanmak ve gereksiz Task sarmalayıcılarını önlemek önemlidir. Hata ayıklamada Stack Trace incelemesi, logging ve thread izleme kullanılabilir. Veri doğrulama ve istisna yönetimi, güvenli asenkron uygulamalar için kritik önemdedir.
📊 Referans Tablosu
C# Element/Concept | Description | Usage Example |
---|---|---|
async | Asenkron metot tanımlar | async Task<string> VeriAlAsync() |
await | Task tamamlanmasını bekler | string veri = await VeriAlAsync(); |
Task & Task<T> | Asenkron işlemleri temsil eder | Task<string> gorev = VeriAlAsync(); |
Task.WhenAll/WhenAny | Birden fazla Task paralel çalıştırılır | await Task.WhenAll(gorev1, gorev2); |
HttpClient asenkron | HTTP isteklerini asenkron gönderir | using HttpClient client = new HttpClient(); |
Asenkron programlama, uygulamaların yanıt verebilirliğini ve ölçeklenebilirliğini artırır. Async/await, Task ve Task
🧠 Bilginizi Test Edin
Test Your Knowledge
Test your understanding of this topic with practical questions.
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek