Thread vs. Task in C#

Muhammad Maisam Abbas 16 Februar 2024
  1. Thread in C#
  2. Aufgabe in C#
  3. Thread vs. Task in C#
Thread vs. Task in C#

In diesem Tutorial werden die Ähnlichkeiten und Unterschiede zwischen der Klasse Thread und der Klasse Task in C# erläutert.

Thread in C#

Die Klasse Thread erstellt einen tatsächlichen Thread auf Betriebssystemebene in C#. Der mit der Klasse Thread erstellte Thread benötigt Ressourcen wie Speicher für den Stapel, und der CPU-Overhead für den Kontext wechselt von einem Thread zum anderen. Die Klasse Thread bietet den höchsten Grad an Kontrolle wie die Funktion Abort(), die Funktion Suspend(), die Funktion Resume() usw. Wir können auch einige Attribute auf Thread-Ebene wie die Stapelgröße angeben . Das folgende Codebeispiel zeigt uns, wie wir einen Thread mit der Klasse Thread in C# erstellen können.

using System;
using System.Threading;
using System.Threading.Tasks;

namespace wait_for_thread {
  class Program {
    static void fun1() {
      for (int i = 0; i < 2; i++) {
        Console.WriteLine("Thread 1");
      }
    }
    static void fun2() {
      for (int i = 0; i < 2; i++) {
        Console.WriteLine("Thread 2");
      }
    }
    static void Main(string[] args) {
      Thread thread1 = new Thread(new ThreadStart(fun1));
      Thread thread2 = new Thread(new ThreadStart(fun2));

      thread1.Start();
      thread2.Start();
      Console.WriteLine("The End");
    }
  }
}

Ausgabe:

The End
Thread 2
Thread 2
Thread 1
Thread 1

Im obigen Code haben wir die Threads thread1 und thread2 mit der Klasse Thread in C# erstellt.

Aufgabe in C#

Eine Task-Klasse erstellt eine asynchrone Task auf Systemebene in C#. Der Taskplaner führt die mit der Klasse Task erstellten Tasks aus. Der Standardplaner führt die Aufgabe im Thread-Pool aus. Im Gegensatz zu den mit der Klasse Thread erstellten Threads benötigen die mit der Klasse Task erstellten Tasks keinen zusätzlichen Speicher oder CPU-Ressourcen. Die Klasse Task kann nicht verwendet werden, um Attribute auf Thread-Ebene wie die Stapelgröße anzugeben. Da die Klasse Task im Thread-Pool ausgeführt wird, können alle lang laufenden Tasks den Thread-Pool füllen und die neue Task kann darauf warten, dass die vorherigen Tasks ausgeführt werden. Das folgende Codebeispiel zeigt uns, wie wir mit der Klasse Task in C# eine Aufgabe erstellen können.

using System;
using System.Threading;
using System.Threading.Tasks;

namespace wait_for_thread {
  class Program {
    static void fun1() {
      for (int i = 0; i < 2; i++) {
        Console.WriteLine("Thread 1");
      }
    }
    static void fun2() {
      for (int i = 0; i < 2; i++) {
        Console.WriteLine("Thread 2");
      }
    }
    static void Main(string[] args) {
      Task task1 = Task.Factory.StartNew(() => fun1());
      Task task2 = Task.Factory.StartNew(() => fun2());
      Task.WaitAll(task1, task2);
      Console.WriteLine("The End");
    }
  }
}

Ausgabe:

Thread 1
Thread 1
Thread 2
Thread 2
The End

Wir haben die Aufgaben task1 und task2 mit der Klasse Task in C# im obigen Code erstellt.

Thread vs. Task in C#

Sowohl die Klasse Thread als auch die Klasse Task werden für die parallele Programmierung in C# verwendet. Ein Thread ist eine Implementierung auf niedrigerer Ebene, während eine Task eine Implementierung auf höherer Ebene ist. Es werden Ressourcen benötigt, während eine Task dies nicht tut. Es bietet auch mehr Kontrolle als die Klasse Task. Ein Thread sollte für lang laufende Operationen bevorzugt werden, während eine Task für alle anderen asynchronen Operationen bevorzugt werden sollte.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Verwandter Artikel - Csharp Thread

Verwandter Artikel - Csharp Task