Uniendo hilos en C#

En C#, la clase Thread proporciona el método Join() que permite que un hilo espere hasta que otro hilo complete su ejecución. Si t es un objeto Thread cuyo hilo se está ejecutando actualmente, entonces t.Join() hace que el hilo actual pause su ejecución hasta que el hilo al que se une complete su ejecución.
Si hay varios subprocesos que llaman a los métodos Join(), eso significa que la sobrecarga en la unión permite al programador especificar un período de espera. Sin embargo, al igual que con la suspensión, Join depende del sistema operativo para la sincronización, por lo que no debe suponer que la unión esperará exactamente el tiempo que especifique.

Hay tres métodos en la lista de sobrecarga del Thread.Join()método de la siguiente manera:

  • Método Join(): este método bloquea el subproceso de llamada hasta que el subproceso representado por esta instancia finaliza mientras continúa realizando el bombeo estándar de COM y SendMessage.

    Sintaxis:

    public void Join();
  • Método Join(Int32): este método bloquea el subproceso de llamada hasta que finaliza el subproceso representado por esta instancia o transcurre el tiempo especificado mientras continúa realizando el bombeo estándar de COM y SendMessage.

    Sintaxis:

    public bool Join (int millisecondsTimeout);
  • Método Join(TimeSpan): este método bloquea el subproceso de llamada hasta que finaliza el subproceso representado por esta instancia o transcurre el tiempo especificado mientras continúa realizando el bombeo estándar de COM y SendMessage.

    Sintaxis:

    public bool Join (TimeSpan timeout);

Ejemplo 1:

// C# program to illustrate the 
// concept of Join() method
using System; 
using System.Threading; 
  
public class ExThread 
{ 
  
    // Non-Static method
    public void mythread() 
    { 
        for (int x = 0; x < 4; x++) 
        { 
            Console.WriteLine(x); 
            Thread.Sleep(100); 
        } 
    } 
  
    // Non-Static method
    public void mythread1()
    {
        Console.WriteLine("2nd thread is Working..");
    }
} 
  
// Driver Class
public class ThreadExample 
{ 
    // Main method
    public static void Main() 
    { 
        // Creating instance for
        // mythread() method
        ExThread obj = new ExThread(); 
          
        // Creating and initializing threads 
        Thread thr1 = new Thread(new ThreadStart(obj.mythread)); 
        Thread thr2 = new Thread(new ThreadStart(obj.mythread1)); 
        thr1.Start(); 
          
        // Join thread
        thr1.Join(); 
        thr2.Start(); 
          
    } 
} 

Producción:

0
1
2
3
2nd thread is Working..

Explicación: En el ejemplo anterior, tenemos una clase denominada ExThread y esta clase contiene un método no estático, es decir, mythread()y mythread1(). Entonces creamos una instancia, es decir, obj de la clase ExThread y la referimos en el constructor de la clase ThreadStart . Usando Thread thr1 = new Thread(new ThreadStart(obj.mythread));la declaración, creamos un subproceso llamado thr1 e inicializamos el trabajo de este subproceso, de manera similar para el subproceso thr2 . Al usar thr1.Join();la declaración, enviaremos la llamada de thr2 a la espera hasta que se complete el trabajo del subproceso thr1 . Después de que se ejecuta el subproceso thr2 .

Ejemplo 2:

// C# program to illustrate the
// concept of Join() method
using System;
using System.Threading;
   
class GFG {
   
    // Creating TimeSpan for thread
    static TimeSpan mytime = new TimeSpan(0, 0, 1);
   
    // Main method
    public static void Main()
    {
        // Creating and initializing new thread
        Thread thr = new Thread(mywork);
        thr.Start();
   
        if (thr.Join(mytime + mytime)) {            
            Console.WriteLine("New thread is terminated");
        }
        else {
            Console.WriteLine("Join timed out");
        }
    }
   
    static void mywork()
    {
        Thread.Sleep(mytime);
    }
}

Producción:

New thread is terminated

Referencia:

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *