Middle
Koja je razlika između niti (Thread) i zadataka (Task) u C#?
sobes.tech АИ
Одговор од АИ
Nit (Thread) predstavlja niskonivojsku apstrakciju operativnog sistema za izvršavanje koda paralelno. Zadaci (Task) su koncept višeg nivoa u .NET-u, zasnovan na poolu niti, koji pojednostavljuje asinhrono i paralelno programiranje.
Glavne razlike:
- Nivo apstrakcije: Thread direktno radi sa OS nitima. Task je apstrakcija koju upravlja planer (obično ThreadPool).
- Upravljanje: Ručno upravljanje nitima (kreiranje, pokretanje, zaustavljanje) može biti složeno. Task je upravljan od strane planera, što olakšava njihovu upotrebu.
- Resursi: Kreiranje nove niti zahteva više sistemskih resursa nego korišćenje Task iz poola niti.
- Vraćene vrednosti i izuzeci: Task ima ugrađene mehanizme za dobijanje vraćenih vrednosti (
Task<TResult>) i obradu neobrađenih izuzetaka. Za Thread, ovo zahteva rušnu implementaciju. - Asinhronost: Task je usko integrisan sa ključnim rečima
asynciawait, što znatno pojednostavljuje pisanje asinhronog koda. Thread za asinhronost zahteva ručno korišćenje callback-ova ili drugih mehanizama. - Otkaži: Otkaži Task podržava se putem
CancellationToken. Otkaži Thread zahteva ručno implementiranje mehanizama prekida.
Primer kreiranja i čekanja:
// Korišćenje Task
async Task MyTaskAsync()
{
await Task.Delay(100);
Console.WriteLine("Zadatak je završio");
}
// Pokretanje i čekanje Task
Task t = MyTaskAsync();
await t;
// Korišćenje Thread-a (niži nivo)
Thread myThread = new Thread(() =>
{
Thread.Sleep(100);
Console.WriteLine("Thread je završio");
});
// Pokretanje Thread-a
myThread.Start();
// Čekanje na završetak Thread-a (blokirajući poziv)
myThread.Join();