Espere a que termine un subproceso en C#

Muhammad Maisam Abbas 16 febrero 2024
  1. Espere a que termine un hilo con el método Task.WaitAll() en C#
  2. Espere a que termine un hilo con el método Thread.Join() en C#
Espere a que termine un subproceso en C#

Este tutorial discutirá los métodos para esperar la finalización de un hilo en C#.

Espere a que termine un hilo con el método Task.WaitAll() en C#

El método Task.WaitAll() en C# se utiliza para esperar la finalización de todos los objetos de la clase Task. La clase Tarea representa una tarea asincrónica en C#. Podemos iniciar subprocesos con la clase Task y esperar a que los subprocesos terminen con el método Task.WaitAll() en 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");
    }
  }
}

Producción :

Thread 1
Thread 1
Thread 2
Thread 2
The End

En el código anterior, esperamos la finalización de las tareas thread1 y thread2 dentro del subproceso principal con el método Task.WaitAll() en C#.

Espere a que termine un hilo con el método Thread.Join() en C#

En la sección anterior, discutimos cómo podríamos esperar un hilo con el método Task.WaitAll() en C#. También podemos lograr el mismo objetivo con el método Thread.Join() en C#. El método Thread.Join() detiene la ejecución del hilo de llamada hasta que el hilo actual completa su ejecución. El siguiente ejemplo de código nos muestra cómo esperar a que un hilo complete su ejecución con el método Thread.Join() en 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");
    }
  }
}

Producción :

Thread 1
Thread 1
Thread 2
Thread 2
The End

En el código anterior, esperamos que los subprocesos thread1 y thread2 terminaran dentro del subproceso principal con el método Thread.Join() en 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

Artículo relacionado - Csharp Thread