Join 就是加入的意思,也就是说新创建的线程加入到进程中,并马上执行。
看下面这段代码
1 Console.WriteLine("start"); 2 Thread myTask = new Thread(() => 3 { 4 for (int i = 0; i < 10; i++) 5 { 6 Console.WriteLine("******" + i + "*****"); 7 Thread.Sleep(1000); 8 } 9 }); 10 myTask.Start(); 11 myTask.Join(); 12 Console.WriteLine("stop");
在实际使用的时候会使用到jion的另一个重载方法
public bool Join(int millisecondsTimeout)
当使用这个方法设置超时时间的时候可以在超时时跳出线程,回到原来的线程。看下面代码测试
1 Console.WriteLine("start"); 2 Thread myTask = new Thread(() => 3 { 4 for (int i = 0; i < 10; i++) 5 { 6 Console.WriteLine("******" + i + "*****"); 7 Thread.Sleep(1000); 8 } 9 }); 10 myTask.Start(); 11 myTask.Join(); 12 if (!myTask.Join(3 * 1000)) 13 { 14 Console.WriteLine("time out");15 }
这个时候time out 就会在3秒时执行,但是从上面的结果上可以看到,myTask这个线程并没有结束,还是继续执行着,所以,当使用这个函数的时候,需要注意终止掉jion的线程,代码如下
1 Console.WriteLine("start"); 2 Thread myTask = new Thread(() => 3 { 4 for (int i = 0; i < 10; i++) 5 { 6 Console.WriteLine("******" + i + "*****"); 7 Thread.Sleep(1000); 8 } 9 }); 10 myTask.Start(); 11 myTask.Join(); 12 //Console.WriteLine("stop"); 13 if (!myTask.Join(3 * 1000)) 14 { 15 Console.WriteLine("time out"); 16 myTask.Abort(); 17 }