Maison > Article > développement back-end > Rejoindre un fil C#
En C#, la classe de jointure de thread sous l'espace de noms de thread système comprend de nombreuses méthodes pour travailler avec les threads. Une de ces méthodes est Thread.Join(). Cette méthode est utilisée pour faire attendre tous les threads appelants jusqu'à ce que le thread actuel termine ou termine sa tâche. La méthode Join() dans le thread peut être utilisée pour réaliser la synchronisation et elle peut également être utilisée pour garantir qu'un thread particulier a été terminé.
C# fournit trois surcharges de la méthode Join(), qui sont les suivantes :
Syntaxe
La syntaxe de la méthode Join() pour ses trois surcharges est la suivante :
public void Join();
La méthode Join() ci-dessus ne prend aucun argument et bloque le thread appelant jusqu'à ce que le thread représenté par l'instance actuelle termine son exécution ou se termine lors de l'exécution du pompage COM et SendMessage standard.
public bool Join(int millisecondsTimeout);
La méthode Join() ci-dessus prend un entier comme argument et bloque le thread appelant jusqu'à ce que le thread représenté par l'instance actuelle termine son exécution ou se termine ou que le temps (millisecondes) spécifié à l'aide de l'argument entier 'millisecondsTimeout' s'écoule lors de l'exécution du standard. Pompage COM et SendMessage.
public bool Join(TimeSpan timeout);
Cette méthode Join() prend un argument de type TimeSpan et bloque le thread appelant jusqu'à ce que le thread représenté par l'instance actuelle termine son exécution ou se termine ou que le temps spécifié à l'aide de l'argument 'timeout' s'écoule lors de l'exécution du pompage standard COM et SendMessage. .
Pour travailler avec des threads en C#, nous devons d'abord importer le système. Espace de noms Threading dans notre code afin que nous puissions avoir accès aux classes présentes dans l'espace de noms Threading.
La classe Thread sous l'espace de noms Threading contient la méthode Join() qui est utilisée pour faire fonctionner plusieurs threads de manière synchronisée en bloquant le thread appelant jusqu'à ce que le thread qui a déjà appelé la méthode Join() termine sa tâche et se termine. Le thread appelant sera bloqué pour une durée indéterminée si le thread qui a appelé la méthode Join() ne se termine pas. Ainsi, la méthode join() nous aide à garantir qu'un thread particulier a été terminé.
La méthode Join() fonctionne sur un thread qui est à l'état actif, nous pouvons le vérifier en utilisant la propriété Thread.IsAlive. Si nous appelons la méthode Join() avant le démarrage du thread, la méthode Join() reviendra immédiatement. De la même manière, si vous appelez la méthode Join() alors que le thread est déjà terminé, la méthode Join() sera également renvoyée immédiatement. Ainsi, la méthode Join() retourne immédiatement si le thread n'est pas en cours d'exécution.
Nous ne devons pas appeler la méthode Join() de l'objet thread qui indique le thread actuel. Cela empêchera notre application de répondre car le fil de discussion actuel attendra indéfiniment.
Veuillez trouver ci-dessous un tableau montrant des détails importants concernant trois surcharges de la méthode Join() :
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.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!