Dalam C# kelas join thread di bawah ruang nama threading sistem terdiri daripada banyak kaedah untuk berfungsi dengan thread. Satu kaedah sedemikian ialah Thread.Join(). Kaedah ini digunakan untuk membuat semua utas panggilan menunggu sehingga utas semasa menamatkan atau menyelesaikan tugasnya. Kaedah Join() dalam thread boleh digunakan untuk mencapai penyegerakan dan ia juga boleh digunakan untuk memastikan thread tertentu telah ditamatkan.
C# menyediakan tiga lebihan kaedah Join(), iaitu seperti berikut:
Sintaks
Sintaks kaedah Join() untuk ketiga-tiga lebihannya adalah seperti berikut:
public void Join();
Kaedah Join() di atas tidak mengambil sebarang hujah dan menyekat urutan panggilan sehingga urutan yang diwakili oleh tika semasa menyelesaikan pelaksanaannya atau ditamatkan semasa melakukan pengepaman COM dan SendMessage standard.
public bool Join(int millisecondsTimeout);
Kaedah Join() di atas mengambil integer sebagai argumen dan menyekat utas panggilan sehingga thread yang diwakili oleh tika semasa menyelesaikan pelaksanaannya atau ditamatkan atau masa (milisaat) yang ditentukan menggunakan argumen integer 'millisecondsTimeout' berlalu semasa melaksanakan standard COM dan SendMessage mengepam.
public bool Join(TimeSpan timeout);
Kaedah Join() ini mengambil hujah jenis TimeSpan dan menyekat utas panggilan sehingga utas yang diwakili oleh tika semasa menyelesaikan pelaksanaannya atau ditamatkan atau masa yang ditentukan menggunakan argumen 'masa tamat' berlalu semasa melakukan pengepaman COM dan SendMessage standard .
Untuk bekerja dengan benang dalam C#, kita perlu mengimport Sistem terlebih dahulu. Membentangkan ruang nama dalam kod kami supaya kami boleh mempunyai akses kepada kelas yang terdapat di dalam Menjalin ruang nama.
Kelas Thread di bawah ruang nama Threading mengandungi kaedah Join() yang digunakan untuk membuat beberapa utas berfungsi dengan cara yang disegerakkan dengan menyekat utas panggilan sehingga thread yang telah memanggil kaedah Join() menyelesaikan tugasnya dan ditamatkan. Urutan panggilan akan disekat untuk tempoh masa yang tidak ditentukan jika utas yang telah dipanggil kaedah Join() tidak ditamatkan. Oleh itu, kaedah join() membantu kami dalam memastikan urutan tertentu telah ditamatkan.
Kaedah Join() berfungsi pada benang yang berada dalam keadaan hidup, kita boleh menyemaknya dengan menggunakan sifat Thread.IsAlive. Jika kita memanggil kaedah Join() sebelum benang dimulakan maka kaedah Join() akan kembali serta-merta. Dengan cara yang sama, jika anda memanggil kaedah Join() apabila benang telah ditamatkan maka kaedah Join() juga akan kembali serta-merta. Oleh itu, kaedah Join() kembali serta-merta jika utas tidak berjalan.
Kita tidak sepatutnya memanggil kaedah Join() objek benang yang menunjukkan urutan semasa. Ini akan menjadikan apl kami tidak bertindak balas kerana urutan semasa akan menunggu sendiri selama-lamanya.
Sila cari di bawah jadual yang menunjukkan butiran penting mengenai tiga kelebihan kaedah Sertai():
|
Parameter | Pemulangan | ||||||||||||
public void Sertai() | Ia tidak memerlukan sebarang hujah. | Mengembalikan batal. | ||||||||||||
public bool Join(int millisecondsTimeout) | Integer yang mewakili bilangan milisaat yang diperlukan untuk menunggu urutan ditamatkan. | Mengembalikan nilai Boolean; mengembalikan benar jika benang telah ditamatkan dan mengembalikan palsu jika masa yang ditentukan oleh parameter telah berlalu dan benang belum ditamatkan. | ||||||||||||
public bool Join(TimeSpan timeout) | Jangka Masa yang menunjukkan jumlah masa yang diperlukan untuk menunggu urutan ditamatkan. | Mengembalikan nilai Boolean; mengembalikan benar jika benang telah ditamatkan dan mengembalikan palsu jika masa yang ditentukan oleh parameter telah berlalu dan benang belum ditamatkan. |
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.
Atas ialah kandungan terperinci C# Thread Join. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!