Sobes.tech
Middle

¿Cuál es la diferencia entre hilos (Thread) y tareas (Task) en C#?

sobes.tech AI

Respuesta de la IA

Los hilos (Thread) representan una abstracción de bajo nivel del sistema operativo para ejecutar código en paralelo. Las tareas (Task) son un concepto de nivel superior en .NET, basado en un grupo de hilos, que simplifica la programación asíncrona y paralela.

Diferencias principales:

  • Nivel de abstracción: Thread trabaja directamente con los hilos del sistema operativo. Task es una abstracción gestionada por el planificador (generalmente ThreadPool).
  • Gestión: La gestión manual de hilos (creación, inicio, parada) puede ser compleja. Task es gestionada por el planificador, lo que facilita su uso.
  • Recursos: Crear un nuevo Thread requiere más recursos del sistema que usar un Task del grupo de hilos.
  • Valores de retorno y excepciones: Task tiene mecanismos integrados para obtener valores de retorno (Task<TResult>) y manejar excepciones no controladas. Para Thread, esto requiere implementación manual.
  • Asincronía: Task está estrechamente integrado con las palabras clave async y await, lo que simplifica mucho la escritura de código asíncrono. Thread para asincronía requiere el uso manual de callbacks u otros mecanismos.
  • Cancelación: La cancelación de Task se soporta mediante CancellationToken. La cancelación de Thread requiere la implementación manual de mecanismos de interrupción.

Ejemplo de creación y espera:

// Uso de Task
async Task MyTaskAsync()
{
    await Task.Delay(100);
    Console.WriteLine("Tarea terminada");
}

// Inicio y espera de la tarea
Task t = MyTaskAsync();
await t;

// Uso de Thread (enfoque de nivel inferior)
Thread myThread = new Thread(() =>
{
    Thread.Sleep(100);
    Console.WriteLine("Hilo terminado");
});

// Inicio del hilo
myThread.Start();

// Espera a que termine el hilo (llamada bloqueante)
myThread.Join();