Middle
C# da iplar (Thread) va vazifalar (Task) o'rtasidagi farq nima?
sobes.tech AI
AIdan javob
IP tarmoq (Thread) — bu operatsion tizimining pastki darajadagi abstraktsiyasini ifodalaydi va kodni parallel ravishda bajarish uchun mo'ljallangan. Vazifalar (Task) — .NETda yuqori darajadagi tushuncha bo'lib, u thread havuziga asoslangan bo'lib, asinxron va parallel dasturlashni soddalashtiradi.
Asosiy farqlar:
- Abstraktsiya darajasi: Thread to'g'ridan-to'g'ri operatsion tizimning tarmog'lari bilan ishlaydi. Task — bu planlashtiruvchi (odatda ThreadPool) tomonidan boshqariladigan abstraktsiya.
- Boshqaruv: Threadlarni qo'lda boshqarish (yaratish, ishga tushirish, to'xtatish) murakkab bo'lishi mumkin. Task planlashtiruvchi tomonidan boshqariladi, bu esa ularni foydalanishni osonlashtiradi.
- Resurslar: Yangi Thread yaratish, Thread havuzidan foydalanishga qaraganda, ko'proq tizim resurslarini talab qiladi.
- Qaytish qiymatlari va istisnolar: Task qaytariladigan qiymatlarni (
Task<TResult>) olish va ishlov berilmagan istisnolarni boshqarish uchun ichki mexanizmlarga ega. Thread uchun bu qo'lda amalga oshiriladi. - Asinxronlik: Task
asyncvaawaitso'zlari bilan yaqin integratsiyalashgan, bu esa asinxron kod yozishni sezilarli darajada soddalashtiradi. Thread uchun asinxronlik qo'lda callbacklar yoki boshqa mexanizmlar yordamida amalga oshiriladi. - Bekor qilish: Taskni bekor qilish
CancellationTokenorqali qo'llab-quvvatlanadi. Threadni bekor qilish uchun bekor qilish mexanizmlarini qo'lda amalga oshirish kerak.
Yaratish va kutish misoli:
// Taskdan foydalanish
async Task MyTaskAsync()
{
await Task.Delay(100);
Console.WriteLine("Vazifa tugadi");
}
// Taskni ishga tushurish va kutish
Task t = MyTaskAsync();
await t;
// Threaddan foydalanish (pastki darajadagi yondashuv)
Thread myThread = new Thread(() =>
{
Thread.Sleep(100);
Console.WriteLine("Thread tugadi");
});
// Threadni ishga tushurish
myThread.Start();
// Thread tugashini kutish (bloklovchi chaqiriq)
myThread.Join();