Heim  >  Artikel  >  Backend-Entwicklung  >  C#-Thread-Join

C#-Thread-Join

PHPz
PHPzOriginal
2024-09-03 15:25:40818Durchsuche

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:

  • Join()
  • Join(Int32)
  • Beitreten (Zeitspanne)

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 .

Wie funktioniert die Thread Join()-Methode in C#?

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.
Methode Parameter Rückgabe public void Join() Es werden keine Argumente akzeptiert. Gibt ungültig zurück. public bool Join(int millisecondsTimeout) Eine Ganzzahl, die die Anzahl der Millisekunden darstellt, die benötigt werden, um auf die Beendigung des Threads zu warten. Gibt einen booleschen Wert zurück; gibt true zurück, wenn der Thread beendet wurde, und false, wenn die durch den Parameter angegebene Zeit abgelaufen ist und der Thread nicht beendet wurde. public bool Join(TimeSpan timeout) Eine Zeitspanne, die die Zeit angibt, die benötigt wird, um auf die Beendigung des Threads zu warten. Gibt einen booleschen Wert zurück; gibt true zurück, wenn der Thread beendet wurde, und false, wenn die durch den Parameter angegebene Zeit abgelaufen ist und der Thread nicht beendet wurde.

Examples of C# Thread Join

Below are the examples of c# thread join:

Example #1

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:

C#-Thread-Join

Example #2

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:

C#-Thread-Join

Example #3

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:

C#-Thread-Join

Conclusion

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:C#-ThreadNächster Artikel:C#-Thread