Thread vs task em C#

Muhammad Maisam Abbas 16 fevereiro 2024
  1. Thread em C#
  2. Tarefa em C#
  3. Thread vs Task em C#
Thread vs task em C#

Este tutorial discutirá as semelhanças e diferenças entre a classe Thread e a classe Task em C#.

Thread em C#

A classe Thread cria um thread real no nível do sistema operacional em C#. O encadeamento criado com a classe Thread consome recursos como memória para a pilha e a sobrecarga da CPU para as mudanças de contexto de um encadeamento para outro. A classe Thread fornece o mais alto grau de controle, como a função Abort(), a função Suspend(), a função Resume(), etc. Também podemos especificar alguns atributos de nível de thread, como tamanho da pilha . O exemplo de código a seguir nos mostra como podemos criar um thread com a classe Thread em 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");
    }
  }
}

Resultado:

The End Thread 2 Thread 2 Thread 1 Thread 1

No código acima, criamos threads thread1 e thread2 com a classe Thread em C#.

Tarefa em C#

Uma classe Task cria uma tarefa assíncrona no nível do sistema em C#. O agendador de tarefas executa as tarefas criadas com a classe Task. O agendador padrão executa a tarefa dentro do pool de threads. Ao contrário dos threads criados com a classe Thread, as tarefas criadas com a classe Task não requerem memória adicional ou recursos de CPU. A classe Task não pode ser usada para especificar os atributos de nível de thread, como o tamanho da pilha. Uma vez que a classe Task é executada no pool de threads, qualquer tarefa de longa execução pode preencher o pool de threads e a nova tarefa pode acabar esperando que as tarefas anteriores concluam a execução. O exemplo de código a seguir nos mostra como podemos criar uma tarefa com a classe Task em 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");
    }
  }
}

Resultado:

Thread 1 Thread 1 Thread 2 Thread 2 The End

Criamos as tarefas task1 e task2 com a classe Task em C# no código acima.

Thread vs Task em C#

Ambas as classes Thread e Task são usadas para programação paralela em C#. Um Thread é uma implementação de nível inferior, enquanto uma Thread é uma implementação de nível superior. Requer recursos, enquanto uma Thread não. Também fornece mais controle do que a classe Thread. Um Thread deve ser preferido para quaisquer operações de longa duração, enquanto uma Thread deve ser preferido para quaisquer outras operações assíncronas.

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

Artigo relacionado - Csharp Thread