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.
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.
LinkedInVerwandter Artikel - Csharp Thread
- Beenden eines Threads in C#
- Thread.Sleep() in C#
- Thread-sichere Liste in C#
- Warten auf das Ende eines Threads in C#
- lock Anweisung in C#