Logo

C# WaitAll 等待所有线程执行完毕

photo

2022年05月13日

 方法一

        private void button1_Click(object sender, EventArgs e)
        {
            DateTime start = DateTime.Now;
            List<Task> taskList = new List<Task>();
            taskList.Add(Task.Run(() =>
            {

                Thread.Sleep(3000);
                Console.WriteLine("三秒输出");
            }));
            taskList.Add(Task.Run(() =>
            {

                Thread.Sleep(7000);
                Console.WriteLine("七秒输出");
            }));
            taskList.Add(Task.Run(() =>
            {

                Thread.Sleep(5000);
                Console.WriteLine("五秒输出");
            }));
            //等待结束
            Task.WaitAll(taskList.ToArray());
            DateTime end = DateTime.Now;
            int num = GetTimeSpanSeconds(start, end);
            Console.WriteLine($"三个线程已执行完毕,用时:{num}s");

        }
        /// <summary>
        /// 两个时间间隔秒数
        /// </summary>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public static int GetTimeSpanSeconds(DateTime startTime, DateTime endTime)
        {
            TimeSpan ts = endTime.Subtract(startTime);
            int sec = (int)ts.TotalSeconds;
            return sec;
        }

 方法二

        private void button1_Click(object sender, EventArgs e)
        {
            DateTime start = DateTime.Now;
            AutoResetEvent[] watchers = new AutoResetEvent[3];
            watchers[0] = new AutoResetEvent(false);
            //启动10个线程输出10个数字
            new Thread(() =>
            {
                Thread.Sleep(3000);
                Console.WriteLine("三秒输出");
                watchers[0].Set();     //线程执行完的时候通知
            }).Start();


            watchers[1] = new AutoResetEvent(false);
            //启动10个线程输出10个数字
            new Thread(() =>
            {
                Thread.Sleep(7000);
                Console.WriteLine("七秒输出");
                watchers[1].Set();     //线程执行完的时候通知
            }).Start();


            watchers[2] = new AutoResetEvent(false);
            //启动10个线程输出10个数字
            new Thread(() =>
            {
                Thread.Sleep(5000);
                Console.WriteLine("五秒输出");
                watchers[2].Set();     //线程执行完的时候通知
            }).Start();

            WaitHandle.WaitAll(watchers);  //确保所有线程都执行完毕
            DateTime end = DateTime.Now;
            int num = GetTimeSpanSeconds(start, end);
            Console.WriteLine($"三个线程已执行完毕,用时:{num}s");            
        }
        /// <summary>
        /// 两个时间间隔秒数
        /// </summary>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public static int GetTimeSpanSeconds(DateTime startTime, DateTime endTime)
        {
            TimeSpan ts = endTime.Subtract(startTime);
            int sec = (int)ts.TotalSeconds;
            return sec;
        }

 

橙子主题打折出售

其实我不卖,主要是这里是放广告的,所以就放了一个
毕竟主题都没做完,卖了也是坑.

购买它
所有附件
该文章没有附件.
本文为原创文章,请注意保留出处!

有一群友问到关于SharePoint列表的导入与导出的问题,而最近也要做相关操作且好久没写博客了...SharePoint列表的导出导入

热门文章

WordPress 后台编辑器样式实现直接预览 在WordPress3.0以后,有一个新的实用功能:你可以更改默认后台编辑器(TinyMCE)的样...WordPress后台编辑器样式实现直接预览 作者:Pastore Antonio
1532 浏览量
【干货】Chrome插件(扩展)开发全攻略 写在前面我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的...【干货】Chrome插件(扩展)开发全攻略 作者:Pastore Antonio
1488 浏览量
memcached 处理 多端口:https://blog.csdn.net/Erica_1230/article/deta...memcached处理 作者:Pastore Antonio
1481 浏览量
使用Nginx+WordPress搭建个人网站 背景很多研究技术的朋友喜欢写博客。如果希望搭建一个完全属于自己的网站,也并不困难。这里简要分享一下...使用Nginx+WordPress搭建个人网站 作者:Pastore Antonio
1453 浏览量
C#图片处理 通常对一幅图片的处理包括:格式变换,缩放(Scale),翻转(Rotate),截取(Clip),滤镜...C#图片处理 作者:Pastore Antonio
1444 浏览量