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.
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