Middle
Wat is het verschil tussen threads (Thread) en taken (Task) in C#?
sobes.tech AI
Antwoord van AI
Threads (Thread) vormen een low-level abstractie van het besturingssysteem voor het uitvoeren van code parallel. Tasks (Task) zijn een hoger niveau concept in .NET, gebaseerd op een threadpool, dat asynchrone en parallelle programmering vereenvoudigt.
Belangrijkste verschillen:
- Abstractieniveau: Thread werkt direct met OS-threads. Task is een abstractie beheerd door de scheduler (meestal ThreadPool).
- Beheer: Handmatig beheer van threads (aanmaken, starten, stoppen) kan complex zijn. Task wordt door de scheduler beheerd, wat het gebruik vereenvoudigt.
- Resources: Het aanmaken van een nieuwe Thread vereist meer systeembronnen dan het gebruik van een Task uit de threadpool.
- Terugkeerwaarden en uitzonderingen: Task heeft ingebouwde mechanismen voor het verkrijgen van terugkeerwaarden (
Task<TResult>) en het afhandelen van onhandige uitzonderingen. Voor Thread vereist dit handmatige implementatie. - Asynchroniciteit: Task is nauw geïntegreerd met de sleutelwoorden
asyncenawait, wat het schrijven van asynchrone code aanzienlijk vereenvoudigt. Thread voor asynchroniciteit vereist handmatig gebruik van callbacks of andere mechanismen. - Annulering: Het annuleren van een Task wordt ondersteund via
CancellationToken. Het annuleren van een Thread vereist handmatige implementatie van onderbrekingsmechanismen.
Voorbeeld van maken en wachten:
// Gebruik van Task
async Task MyTaskAsync()
{
await Task.Delay(100);
Console.WriteLine("Taak voltooid");
}
// Starten en wachten op Task
Task t = MyTaskAsync();
await t;
// Gebruik van Thread (lager niveau)
Thread myThread = new Thread(() =>
{
Thread.Sleep(100);
Console.WriteLine("Thread voltooid");
});
// Start Thread
myThread.Start();
// Wachten op voltooiing van Thread (blokkerende oproep)
myThread.Join();