Sobes.tech
Middle

Was ist der Unterschied zwischen Threads (Thread) und Tasks (Task) in C#?

sobes.tech KI

Antwort von AI

Threads (Thread) stellen eine Low-Level-Abstraktion des Betriebssystems zur parallelen Ausführung von Code dar. Tasks sind ein höherstufiges Konzept in .NET, basierend auf einem Thread-Pool, das asynchrone und parallele Programmierung vereinfacht.

Hauptunterschiede:

  • Abstraktionsebene: Thread arbeitet direkt mit den Betriebssystem-Threads. Task ist eine vom Scheduler verwaltete Abstraktion (meistens ThreadPool).
  • Verwaltung: Die manuelle Verwaltung von Threads (Erstellung, Start, Stop) kann komplex sein. Tasks werden vom Scheduler verwaltet, was die Nutzung vereinfacht.
  • Ressourcen: Das Erstellen eines neuen Threads erfordert mehr Systemressourcen als die Verwendung eines Tasks aus dem Thread-Pool.
  • Rückgabewerte und Ausnahmen: Tasks verfügen über eingebaute Mechanismen zum Erhalten von Rückgabewerten (Task<TResult>) und zur Behandlung unbehandelter Ausnahmen. Für Threads ist dies manuell umzusetzen.
  • Asynchronität: Tasks sind eng mit den Schlüsselwörtern async und await integriert, was die asynchrone Programmierung erheblich vereinfacht. Threads erfordern manuelle Verwendung von Callbacks oder anderen Mechanismen.
  • Abbruch: Das Abbrechen eines Tasks wird durch CancellationToken unterstützt. Das Abbrechen eines Threads erfordert eine manuelle Implementierung von Abbruchmechanismen.

Beispiel für Erstellung und Warten:

// Verwendung von Task
async Task MyTaskAsync()
{
    await Task.Delay(100);
    Console.WriteLine("Task beendet");
}

// Starten und Warten auf die Task
Task t = MyTaskAsync();
await t;

// Verwendung von Thread (niedrigstufiger Ansatz)
Thread myThread = new Thread(() =>
{
    Thread.Sleep(100);
    Console.WriteLine("Thread beendet");
});

// Thread starten
myThread.Start();

// Warten auf Abschluss des Threads (blockierender Aufruf)
myThread.Join();