Thread vs Task in C#
Questo tutorial discuterà le somiglianze e le differenze tra la classe Thread
e la classe Task
in C#.
Thread in C#
La classe Thread
crea un thread a livello di sistema operativo effettivo in C#. Il thread creato con la classe Thread
prende risorse come la memoria per lo stack e il sovraccarico della CPU per il contesto passa da un thread all’altro. La classe Thread
fornisce il massimo grado di controllo come la funzione Abort()
, la funzione Suspend()
, la funzione Resume()
ecc. Possiamo anche specificare alcuni attributi a livello di thread come la dimensione dello stack. Il seguente esempio di codice ci mostra come creare un thread con la classe Thread
in C#.
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");
}
}
}
Produzione:
The End Thread 2 Thread 2 Thread 1 Thread 1
Nel codice sopra, abbiamo creato i thread thread1
e thread2
con la classe Thread
in C#.
Task in C#
Una Task
class crea un’attività asincrona a livello di sistema in C#. L’utilità di pianificazione esegue le attività create con la classe Task
. Lo scheduler predefinito esegue l’attività all’interno del pool di thread. A differenza dei thread creati con la classe Thread
, i task creati con la classe Task
non richiedono alcuna memoria aggiuntiva o risorse della CPU. La classe Task
non può essere utilizzata per specificare gli attributi a livello di thread come la dimensione dello stack. Poiché la classe Task
viene eseguita sul pool di thread, qualsiasi attività a esecuzione prolungata può riempire il pool di thread e la nuova attività può finire per attendere il completamento dell’esecuzione delle attività precedenti. Il seguente esempio di codice ci mostra come creare un’attività con la classe Task
in C#.
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");
}
}
}
Produzione:
Thread 1 Thread 1 Thread 2 Thread 2 The End
Abbiamo creato le attività task1
e task2
con la classe Task
in C# nel codice sopra.
Thread vs Task in C#
Sia la classe Thread
che la classe Task
vengono utilizzate per la programmazione parallela in C#. Un Thread
è un’implementazione di livello inferiore mentre un Task
è un’implementazione di livello superiore. Ci vogliono risorse mentre un Task
no. Fornisce inoltre un maggiore controllo rispetto alla classe Task
. Un Thread
dovrebbe essere preferito per qualsiasi operazione di lunga durata, mentre un Task
dovrebbe essere preferito per qualsiasi altra operazione asincrona.
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