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();