Middle
C#'ta İş Parçacıkları (Thread) ile Görevler (Task) arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
İş Parçacıkları (Thread), kodu paralel olarak çalıştırmak için işletim sisteminin düşük seviyeli bir soyutlamasını temsil eder. Görevler (Task), .NET'te daha yüksek seviyeli bir kavramdır ve genellikle İş Parçacığı Havuzu (ThreadPool) üzerine kuruludur, asenkron ve paralel programlamayı kolaylaştırır.
Ana farklar:
- Soyutlama seviyesi: Thread doğrudan işletim sistemi iş parçacıklarıyla çalışır. Task, planlayıcı tarafından yönetilen bir soyutlamadır (genellikle ThreadPool).
- Yönetim: İş parçacıklarının manuel yönetimi (oluşturma, başlatma, durdurma) karmaşık olabilir. Task, planlayıcı tarafından yönetildiği için kullanımı kolaydır.
- Kaynaklar: Yeni bir Thread oluşturmak, Thread havuzundan bir Task kullanmaktan daha fazla sistem kaynağı gerektirir.
- Dönüş değerleri ve istisnalar: Task, dönüş değerleri (
Task<TResult>) almak ve işlenmemiş istisnaları yönetmek için yerleşik mekanizmalara sahiptir. Thread için bu manuel olarak uygulanmalıdır. - Asenkronluk: Task,
asyncveawaitanahtar kelimeleriyle sıkı sıkıya entegre edilmiştir, bu da asenkron kod yazımını büyük ölçüde kolaylaştırır. Thread, asenkronluk için geri çağırma veya diğer mekaniklerin manuel kullanımını gerektirir. - İptal: Task iptali,
CancellationTokenaracılığıyla desteklenir. Thread iptali, iptal mekanizmalarının manuel olarak uygulanmasını gerektirir.
Oluşturma ve bekleme örneği:
// Task kullanımı
async Task MyTaskAsync()
{
await Task.Delay(100);
Console.WriteLine("Görev tamamlandı");
}
// Task başlatma ve bekleme
Task t = MyTaskAsync();
await t;
// Thread kullanımı (daha düşük seviyeli yaklaşım)
Thread myThread = new Thread(() =>
{
Thread.Sleep(100);
Console.WriteLine("Thread tamamlandı");
});
// Thread başlatma
myThread.Start();
// Thread tamamlanmasını bekleme (bloklayıcı çağrı)
myThread.Join();