Thread.Join 和 Task.Wait 方法,多线程例子原创
金蝶云社区-云社区用户26064194
云社区用户26064194
9人赞赏了该文章 891次浏览 未经作者许可,禁止转载编辑于2021年10月28日 08:53:31
public static void TaskThreadTest()
        {
            Stopwatch watch = new Stopwatch();
            watch.Start();
            Thread thread = new Thread(new ThreadStart(ThreadFunction));
            Console.WriteLine($"Thread 开始");
            thread.Start();
            //thread.Join();
            watch.Stop();
            Console.WriteLine($"Thread 耗时:{watch.ElapsedMilliseconds}");

            Stopwatch watch2 = new Stopwatch();
            watch2.Start();
            Console.WriteLine($"Run 开始");
            var task = Task.Run(() =>
            {
                for (int i = 0; i < 5; i++)
                {
                    Thread.Sleep(5);
                    Console.WriteLine($"{i}: Run");
                }
            });
            //task.Wait();
            watch2.Stop();
            Console.WriteLine($"Run 耗时:{watch2.ElapsedMilliseconds}");
            Console.WriteLine($"All is End!");
            Console.Read();
        }

        public static void ThreadFunction()
        {
            for (int i = 0; i < 5; i++)
            {
                Thread.Sleep(5);
                Console.WriteLine($"{i}: Thread");
            }
        }

观察运行结果,可以发现 不管是Thread还是Task,都是采用异步处理的方式在子线程里跑的

image.png


接下来我们把 注释的两句话放开(Thread.Join 和 Task.Wait )

再运行,观察结果,可以看到,Thread的线程已经合并到了主线程中,阻塞了主线程,Task异步的任务也变成了阻塞型。


image.png

 两个方法用起来还是很简单的,这样就很清楚了。

赞 9