Thread vs Task in C#

Muhammad Maisam Abbas 16 febbraio 2024
  1. Thread in C#
  2. Task in C#
  3. Thread vs Task in C#
Thread vs Task in C#

Questo tutorial discuterà le somiglianze e le differenze tra la classe Thread e la classe Task in C#.

Thread in C#

La classe Thread crea un thread a livello di sistema operativo effettivo in C#. Il thread creato con la classe Thread prende risorse come la memoria per lo stack e il sovraccarico della CPU per il contesto passa da un thread all’altro. La classe Thread fornisce il massimo grado di controllo come la funzione Abort(), la funzione Suspend(), la funzione Resume() ecc. Possiamo anche specificare alcuni attributi a livello di thread come la dimensione dello stack. Il seguente esempio di codice ci mostra come creare un thread con la classe Thread in 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");
    }
  }
}

Produzione:

The End Thread 2 Thread 2 Thread 1 Thread 1

Nel codice sopra, abbiamo creato i thread thread1 e thread2 con la classe Thread in C#.

Task in C#

Una Task class crea un’attività asincrona a livello di sistema in C#. L’utilità di pianificazione esegue le attività create con la classe Task. Lo scheduler predefinito esegue l’attività all’interno del pool di thread. A differenza dei thread creati con la classe Thread, i task creati con la classe Task non richiedono alcuna memoria aggiuntiva o risorse della CPU. La classe Task non può essere utilizzata per specificare gli attributi a livello di thread come la dimensione dello stack. Poiché la classe Task viene eseguita sul pool di thread, qualsiasi attività a esecuzione prolungata può riempire il pool di thread e la nuova attività può finire per attendere il completamento dell’esecuzione delle attività precedenti. Il seguente esempio di codice ci mostra come creare un’attività con la classe Task in 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");
    }
  }
}

Produzione:

Thread 1 Thread 1 Thread 2 Thread 2 The End

Abbiamo creato le attività task1 e task2 con la classe Task in C# nel codice sopra.

Thread vs Task in C#

Sia la classe Thread che la classe Task vengono utilizzate per la programmazione parallela in C#. Un Thread è un’implementazione di livello inferiore mentre un Task è un’implementazione di livello superiore. Ci vogliono risorse mentre un Task no. Fornisce inoltre un maggiore controllo rispetto alla classe Task. Un Thread dovrebbe essere preferito per qualsiasi operazione di lunga durata, mentre un Task dovrebbe essere preferito per qualsiasi altra operazione asincrona.

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

Articolo correlato - Csharp Thread