Thread vs task em C#

  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.

Está gostando dos nossos tutoriais? Inscreva-se no DelftStack no YouTube para nos apoiar na criação de mais vídeos tutoriais de alta qualidade. Inscrever-se
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