Thread.Join 和 Task.Wait 方法,多线程例子

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

Thread.Join 和 Task.Wait 方法,多线程例子

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.webp


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

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


image.webp

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

Thread.Join 和 Task.Wait 方法,多线程例子

public static void TaskThreadTest() { Stopwatch watch = new Stopwatch(); watch.Start(); Th...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息