Aguarde a conclusão de um thread em C#

Muhammad Maisam Abbas 16 fevereiro 2024
  1. Aguarde a conclusão de um thread com o método Task.WaitAll() em C#
  2. Aguarde a conclusão de um thread com o método Thread.Join() em C#
Aguarde a conclusão de um thread em C#

Este tutorial discutirá os métodos de espera pela conclusão de um thread em C#.

Aguarde a conclusão de um thread com o método Task.WaitAll() em C#

O método Task.WaitAll() em C# é usado para aguardar a conclusão de todos os objetos da classe Task. A classe Task representa uma tarefa assíncrona em C#. Podemos iniciar threads com a classe Task e esperar que as threads terminem com o método Task.WaitAll() em C#.

using System;
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 thread1 = Task.Factory.StartNew(() => fun1());
      Task thread2 = Task.Factory.StartNew(() => fun2());
      Task.WaitAll(thread1, thread2);
      Console.WriteLine("The End");
    }
  }
}

Resultado:

Thread 1 Thread 1 Thread 2 Thread 2 The End

No código acima, esperamos pela conclusão das tarefas thread1 e thread2 dentro do thread principal com o método Task.WaitAll() em C#.

Aguarde a conclusão de um thread com o método Thread.Join() em C#

Na seção acima, discutimos como poderíamos esperar por um thread com o método Task.WaitAll() em C#. Também podemos atingir o mesmo objetivo com o método Thread.Join() em C#. O método Thread.Join() interrompe a execução do thread de chamada até que o thread atual conclua sua execução. O exemplo de código a seguir nos mostra como esperar que um thread conclua sua execução com o método Thread.Join() em C#.

using System;
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();
      thread1.Join();
      thread2.Start();
      thread2.Join();
      Console.WriteLine("The End");
    }
  }
}

Resultado:

Thread 1 Thread 1 Thread 2 Thread 2 The End

No código acima, esperamos que os threads thread1 e thread2 terminassem dentro do thread principal com o método Thread.Join() em C#.

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