Sobes.tech
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, asyncawait aç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 CancellationToken vasitə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();