1.這是一個 後臺線程,IsBackground=true, 主線程完成後,後臺子線程也中止了,即便 子線程 還有沒運行完,也要中止spa
class Program { static void Main(string[] args) { Thread t = new Thread(() => { Console.WriteLine("5秒後,運行子線程"); Thread.Sleep(TimeSpan.FromSeconds(5)); Console.WriteLine("運行完畢"); Console.WriteLine("5秒後,再運行子線程任務"); Thread.Sleep(TimeSpan.FromSeconds(5)); Console.WriteLine("由於主線程要求6秒完成, 這裏須要10秒,因此這句話不會輸出"); Console.ReadKey(); }); t.IsBackground = true;//設置爲後臺線程,主線程完成後,後臺線程也中止 t.Start(); Console.WriteLine("主線程給 後臺子線程 6秒完成任務"); Thread.Sleep(TimeSpan.FromSeconds(6)); Console.WriteLine("主線程完成了"); } }
2.由於線程IsBackground=false,不是後臺線程,因此主線程即便完成了,子線程也會繼續完成線程
class Program { static void Main(string[] args) { Thread t = new Thread(() => { Console.WriteLine("5秒後,運行子線程"); Thread.Sleep(TimeSpan.FromSeconds(5)); Console.WriteLine("子線程運行完畢"); Console.WriteLine("5秒後,再運行子線程任務"); Thread.Sleep(TimeSpan.FromSeconds(5)); Console.WriteLine("由於線程IsBackground = false,不是後臺線程,因此主線程即便完成了,子線程也會繼續完成"); Console.WriteLine("請按任意鍵結束。。。。"); Console.ReadKey(); }); t.IsBackground = false;//由於線程IsBackground = false,不是後臺線程,因此主線程即便完成了,子線程也會繼續完成 t.Start(); Console.WriteLine("主線程給 子線程 6秒完成任務"); Thread.Sleep(TimeSpan.FromSeconds(6)); Console.WriteLine("主線程完成了"); } }