Heim > Artikel > Backend-Entwicklung > C#-Thread-Join
In C# besteht die Thread-Join-Klasse im System-Threading-Namespace aus vielen Methoden zum Arbeiten mit Threads. Eine solche Methode ist Thread.Join(). Diese Methode wird verwendet, um alle aufrufenden Threads warten zu lassen, bis der aktuelle Thread beendet wird oder seine Aufgabe abschließt. Die Join()-Methode im Thread kann verwendet werden, um eine Synchronisierung zu erreichen, und sie kann auch verwendet werden, um sicherzustellen, dass ein bestimmter Thread beendet wurde.
C# bietet drei Überladungen der Join()-Methode, die wie folgt lauten:
Syntax
Die Syntax der Join()-Methode für alle drei Überladungen lautet wie folgt:
public void Join();
Die obige Join()-Methode akzeptiert keine Argumente und blockiert den aufrufenden Thread, bis der von der aktuellen Instanz dargestellte Thread seine Ausführung abschließt oder beendet wird, während das Standard-COM- und SendMessage-Pumpen ausgeführt wird.
public bool Join(int millisecondsTimeout);
Die obige Join()-Methode verwendet eine Ganzzahl als Argument und blockiert den aufrufenden Thread, bis der durch die aktuelle Instanz dargestellte Thread seine Ausführung abschließt oder beendet wird oder die mit dem Ganzzahlargument „millisecondsTimeout“ angegebene Zeit (Millisekunden) während der Standardausführung abläuft COM und SendMessage pumpen.
public bool Join(TimeSpan timeout);
Diese Join()-Methode akzeptiert ein Argument vom Typ TimeSpan und blockiert den aufrufenden Thread, bis der von der aktuellen Instanz dargestellte Thread seine Ausführung abschließt oder beendet wird oder die mit dem Argument „timeout“ angegebene Zeit abläuft, während das standardmäßige COM- und SendMessage-Pumpen ausgeführt wird .
Um mit Threads in C# zu arbeiten, müssen wir zuerst das System importieren. Threading-Namespace in unserem Code, damit wir auf die im Threading-Namespace vorhandenen Klassen zugreifen können.
Die Thread-Klasse im Threading-Namespace enthält die Join()-Methode, die verwendet wird, um mehrere Threads synchron arbeiten zu lassen, indem der aufrufende Thread blockiert wird, bis der Thread, der die Join()-Methode bereits aufgerufen hat, seine Aufgabe abschließt und beendet wird. Der aufrufende Thread wird auf unbestimmte Zeit blockiert, wenn der Thread, der die Join()-Methode aufgerufen hat, nicht beendet wird. Somit hilft uns die Methode join() dabei, sicherzustellen, dass ein bestimmter Thread beendet wurde.
Die Join()-Methode funktioniert mit einem Thread, der sich im aktiven Zustand befindet. Wir können dies mithilfe der Thread.IsAlive-Eigenschaft überprüfen. Wenn wir die Join()-Methode aufrufen, bevor der Thread gestartet ist, kehrt die Join()-Methode sofort zurück. Wenn Sie die Join()-Methode aufrufen, während der Thread bereits beendet wurde, kehrt auch die Join()-Methode auf die gleiche Weise sofort zurück. Daher kehrt die Join()-Methode sofort zurück, wenn der Thread nicht läuft.
Wir sollten nicht die Join()-Methode des Thread-Objekts aufrufen, die den aktuellen Thread angibt. Dadurch reagiert unsere App nicht mehr, da der aktuelle Thread auf unbestimmte Zeit auf sich selbst wartet.
Nachstehend finden Sie eine Tabelle mit wichtigen Details zu drei Überladungen der Join()-Methode:
Method | Parameters | Returns |
public void Join() | It does not take any arguments. | Returns void. |
public bool Join(int millisecondsTimeout) | An integer representing the number of milliseconds required to wait for the thread to terminate. | Returns Boolean value; returns true if the thread has terminated and returns false if the time specified by the parameter has elapsed and the thread has not terminated. |
public bool Join(TimeSpan timeout) | A TimeSpan which indicates the amount of time required to wait for the thread to terminate. | Returns Boolean value; returns true if the thread has terminated and returns false if the time specified by the parameter has elapsed and the thread has not terminated. |
Below are the examples of c# thread join:
Example showing the use of Join() method on first thread and other two threads in the code wait until the first thread completes its execution.
Code:
using System; using System.Threading; namespace ConsoleApp4 { public class Program { public void Display() { for (int i = 1; i <= 5; i++) { Console.WriteLine(Thread.CurrentThread.Name+" : " + i); //suspending thread for specified time Thread.Sleep(200); } } } public class ThreadDemo { public static void Main() { Program obj = new Program(); Thread thread1 = new Thread(new ThreadStart(obj.Display)); thread1.Name = "Thread1"; Thread thread2 = new Thread(new ThreadStart(obj.Display)); thread2.Name = "Thread2"; Thread thread3 = new Thread(new ThreadStart(obj.Display)); thread3.Name = "Thread3"; //starting thread1 thread1.Start(); //calling Join() on thread1 thread1.Join(); //starting thread2 thread2.Start(); //starting thread3 thread3.Start(); Console.ReadLine(); } } }
Output:
Example calling Join() method on all threads.
Code:
using System; using System.Threading; namespace ConsoleApp4 { public class Program { public static void Main(string[] args) { Console.WriteLine("Main thread started"); Thread thread1 = new Thread(Method1); Thread thread2 = new Thread(Method2); Thread thread3 = new Thread(Method3); thread1.Start(); thread2.Start(); thread3.Start(); thread1.Join(); thread2.Join(); thread3.Join(); Console.WriteLine("Main thread ended"); Console.ReadLine(); } public static void Method1() { Console.WriteLine("Method1 - Thread1 starting execution"); Thread.Sleep(1000); Console.WriteLine("Method1 - Thread1 execution completed"); } public static void Method2() { Console.WriteLine("Method2 - Thread2 starting execution"); Thread.Sleep(2500); Console.WriteLine("Method2 - Thread2 execution completed"); } public static void Method3() { Console.WriteLine("Method3 - Thread3 starting execution"); Thread.Sleep(5000); Console.WriteLine("Method3 - Thread3 execution completed"); } } }
Output:
Example of Join(int millisecondsTimeout) method.
Code:
using System; using System.Threading; namespace ConsoleApp4 { public class Program { public static void Main(string[] args) { Console.WriteLine("Main thread started"); Thread thread1 = new Thread(Method1); Thread thread2 = new Thread(Method2); Thread thread3 = new Thread(Method3); thread1.Start(); thread2.Start(); thread3.Start(); if (thread3.Join(2000)) { Console.WriteLine("Execution of thread3 completed in 2 seconds."); } else { Console.WriteLine("Execution of thread3 not completed in 2 seconds."); } Console.WriteLine("Main thread ended"); Console.ReadLine(); } public static void Method1() { Console.WriteLine("Method1 - Thread1 execution started"); Thread.Sleep(1000); Console.WriteLine("Method1 - Thread1 execution completed"); } public static void Method2() { Console.WriteLine("Method2 - Thread2 execution started"); Thread.Sleep(2500); Console.WriteLine("Method2 - Thread2 execution completed"); } public static void Method3() { Console.WriteLine("Method3 - Thread3 execution started"); Thread.Sleep(5000); Console.WriteLine("Method3 - Thread3 execution completed"); } } }
Output:
Join() method in C# makes one thread wait till another thread completes its task and terminates. There are three overloads of the Join() method in C#. Join() method works on the thread which is in the alive state. It helps to achieve synchronization while working with multiple threads.
Das obige ist der detaillierte Inhalt vonC#-Thread-Join. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!