Thread vs Task en C#
Este tutorial discutirá las similitudes y diferencias entre la clase Thread
y la clase Task
en C#.
Subproceso en C#
La clase Thread
crea un subproceso de nivel de sistema operativo real en C#. El hilo creado con la clase Thread
toma recursos como memoria para la pila, y la sobrecarga de la CPU para el contexto cambia de un hilo a otro. La clase Thread
proporciona el mayor grado de control como la función Abort()
, la función Suspend()
, la función Resume()
, etc. También podemos especificar algunos atributos a nivel de subproceso como el tamaño de la pila . El siguiente ejemplo de código nos muestra cómo podemos crear un hilo con la clase Thread
en 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");
}
}
}
Producción :
The End
Thread 2
Thread 2
Thread 1
Thread 1
En el código anterior, creamos los hilos thread1
y thread2
con la clase Thread
en C#.
Tarea en C#
Una clase Task
crea una tarea asincrónica a nivel de sistema en C#. El programador de tareas ejecuta las tareas creadas con la clase Task
. El programador predeterminado ejecuta la tarea dentro del grupo de subprocesos. A diferencia de los subprocesos creados con la clase Thread
, las tareas creadas con la clase Task
no requieren memoria adicional ni recursos de CPU. La clase Task
no se puede utilizar para especificar los atributos de nivel de subproceso como el tamaño de la pila. Dado que la clase Task
se ejecuta en el grupo de subprocesos, cualquier tarea de ejecución prolongada puede llenar el grupo de subprocesos, y la nueva tarea puede terminar esperando a que las tareas anteriores se completen. El siguiente ejemplo de código nos muestra cómo podemos crear una tarea con la clase Task
en 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");
}
}
}
Producción :
Thread 1
Thread 1
Thread 2
Thread 2
The End
Creamos las tareas task1
y task2
con la clase Task
en C# en el código anterior.
Subproceso frente a tarea en C#
Tanto la clase Thread
como la clase Task
se utilizan para la programación paralela en C#. Un Thread
es una implementación de nivel inferior mientras que una Task
es una implementación de nivel superior. Se necesitan recursos mientras que una Task
no. También proporciona más control que la clase Task
. Un Thread
debe ser preferido para cualquier operación de larga ejecución, mientras que una Task
debe ser preferida para cualquier otra operación asincrónica.
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.
LinkedInArtículo relacionado - Csharp Thread
- Detener un hilo en C#
- Thread.Sleep() en C#
- Espere a que termine un subproceso en C#
- Lista segura de hilos en C#
- Declaración de lock en C#