Sobes.tech
Middle

Тафовут байни сӯрохиҳо (Thread) ва вазифаҳо (Task) дар C# чист?

sobes.tech AI

Ҷавоб аз AI

Тармоқлар (Thread) — бу параллел ишга тушириш учун операция тизимининг пастки даражадаги абстракцияси. Вазирлар (Task) — бу .NETда юқори даражадаги тушунча бўлиб, у тўплам тармоқларига асосланган ва асинхрон ҳамда параллел дастурлашни соддалаштиради.

Асосий фарқлар:

  • Абстракция даражаси: Thread тўғридан-тўғри ОС тармоқлари билан ишлайди. Task — бу режалаштирувчи (одатда ThreadPool) томонидан бошқариладиган абстракция.
  • Бошқариш: Қўл билан тармоқларни бошқариш (яратиш, ишга тушириш, тўхтатиш) мураккаб бўлиши мумкин. Task режалаштирувчи томонидан бошқарилади, бу улардан фойдаланишни осонлаштиради.
  • Ресурслар: Янги тармоқ яратиш, одатда, пулдан кўпроқ систем ресурсларини талаб қилади. Task — пулдан фойдаланишдан кўра кам ресурс сарфлайди.
  • Қайтарилган қийматлар ва истисно: Task ўзида қайтарилган қийматлар (Task<TResult>) олиш ва ишланмаган истисноларни бошқариш учун механизмларга эга. Тармоқ учун бу қўл билан амалга оширилиши керак.
  • Асинхронлик: Task async ва await калит сўзлари билан яқин интеграцияланган, бу асинхрон код ёзишни жуда соддалаштиради. Тармоқ асинхронлиги учун қўл билан callbackлар ёки бошқа механизмлар қўлланиши керак.
  • Бекор қилиш: Taskни бекор қилиш CancellationToken орқали қўллаб-қувватланади. Тармоқни бекор қилиш қўл билан бекор қилиш механизмларини амалга оширишни талаб қилади.

Яратиш ва кутув мисоли:

// Taskдан фойдаланиш
async Task MyTaskAsync()
{
    await Task.Delay(100);
    Console.WriteLine("Вазифа тугади");
}

// Taskни бошлаш ва кутув
Task t = MyTaskAsync();
await t;

// Тармоқдан фойдаланиш (пастки даража)
Thread myThread = new Thread(() =>
{
    Thread.Sleep(100);
    Console.WriteLine("Тармоқ тугади");
});

// Тармоқни бошлаш
myThread.Start();

// Тармоқнинг тугашини кутув (блокловчи чақириқ)
myThread.Join();