Thread 設置 IsBackground true false 的 運行差異

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("主線程完成了");
        }
      
       
    }
相關文章
相關標籤/搜索