Thread vs Task en C#

Muhammad Maisam Abbas 16 febrero 2024
  1. Subproceso en C#
  2. Tarea en C#
  3. Subproceso frente a tarea en C#
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.

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

Artículo relacionado - Csharp Thread

Artículo relacionado - Csharp Task