Middle
C#-da İplər (Thread) və Tapşırıqlar (Task) arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
İş parçaları (Thread), kodu paralel olaraq icra etmək üçün əməliyyat sisteminin aşağı səviyyəli abstraksiyasını təmsil edir. Tapşırıqlar (Task) isə .NET-də daha yüksək səviyyəli konseptdir, iş parçacığı hovuzuna əsaslanır və asinxron və paralel proqramlaşdırmanı sadələşdirir.
Əsas fərqlər:
- Abstraksiya səviyyəsi: Thread birbaşa əməliyyat sisteminin iş parçacqları ilə işləyir. Task, planlayıcı tərəfindən idarə olunan abstraksiyadır (adətən ThreadPool).
- İdarəetmə: İş parçacqlarının əl ilə idarə olunması (yaradılması, başlaması, dayandırılması) çətin ola bilər. Task planlayıcı tərəfindən idarə olunur və istifadəsini asanlaşdırır.
- Resurslar: Yeni Thread yaratmaq, Thread hovuzundan istifadə etməkdən daha çox sistem resursu tələb edir.
- Qayıdış dəyərləri və istisnalar: Task, qayıdış dəyərlərini (
Task<TResult>) almaq və işlənməmiş istisnaları idarə etmək üçün daxili mexanizmlərə malikdir. Thread üçün bu əl ilə həyata keçirilməlidir. - Asinxronluq: Task,
asyncvəawaitaçar sözləri ilə sıx inteqrasiya olunub, bu da asinxron kod yazmağı xeyli sadələşdirir. Thread üçün asinxronluq əl ilə callback və ya digər mexanizmlərdən istifadə etməyi tələb edir. - İptal: Task-ın ləğvi
CancellationTokenvasitəsilə dəstəklənir. Thread-ın ləğvi əl ilə ləğv mexanizmlərinin həyata keçirilməsini tələb edir.
Yaratma və gözləmə nümunəsi:
// Task istifadə
async Task MyTaskAsync()
{
await Task.Delay(100);
Console.WriteLine("Tapşırıq tamamlandı");
}
// Task-ı başlat və gözlə
Task t = MyTaskAsync();
await t;
// Thread istifadə (daha aşağı səviyyəli yanaşma)
Thread myThread = new Thread(() =>
{
Thread.Sleep(100);
Console.WriteLine("Thread tamamlandı");
});
// Thread-i başlat
myThread.Start();
// Thread-in tamamlanmasını gözlə (bloklayıcı çağırış)
myThread.Join();