Sobes.tech
Middle

Qual é a diferença entre threads (Thread) e tarefas (Task) em C#?

sobes.tech IA

Resposta da IA

Os threads (Thread) representam uma abstração de baixo nível do sistema operativo para executar código em paralelo. As tarefas (Task) são um conceito de nível superior no .NET, baseado num pool de threads, que simplifica a programação assíncrona e paralela.

Principais diferenças:

  • Nível de abstração: Thread trabalha diretamente com os threads do sistema operativo. Task é uma abstração gerida pelo agendador (geralmente ThreadPool).
  • Gestão: A gestão manual de threads (criação, início, paragem) pode ser complexa. Task é gerida pelo agendador, o que facilita o seu uso.
  • Recursos: Criar um novo Thread requer mais recursos do sistema do que usar um Task do pool de threads.
  • Valores de retorno e exceções: Task tem mecanismos integrados para obter valores de retorno (Task<TResult>) e lidar com exceções não tratadas. Para Thread, isto requer implementação manual.
  • Assincronismo: Task está estreitamente integrado com as palavras-chave async e await, o que simplifica bastante a escrita de código assíncrono. Thread para assincronismo requer o uso manual de callbacks ou outros mecanismos.
  • Cancelamento: O cancelamento de Task é suportado através de CancellationToken. O cancelamento de Thread requer implementação manual de mecanismos de interrupção.

Exemplo de criação e espera:

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

// Iniciar e esperar a Task
Task t = MyTaskAsync();
await t;

// Uso de Thread (abordagem de baixo nível)
Thread myThread = new Thread(() =>
{
    Thread.Sleep(100);
    Console.WriteLine("Thread terminada");
});

// Iniciar Thread
myThread.Start();

// Esperar pela conclusão do Thread (chamada bloqueante)
myThread.Join();