1. 1 不可撤销
  2. 2 小年兽 程嘉敏
  3. 3 手放开 李圣杰
  4. 4 迷人的危险3(翻自 dance flow) FAFA
  5. 5 山楂树之恋 程佳佳
  6. 6 summertime cinnamons / evening cinema
  7. 7 不谓侠(Cover 萧忆情Alex) CRITTY
  8. 8 神武醉相思(翻自 优我女团) 双笙
  9. 9 空山新雨后 音阙诗听 / 锦零
  10. 10 Wonderful U (Demo Version) AGA
  11. 11 广寒宫 丸子呦
  12. 12 陪我看日出 回音哥
  13. 13 春夏秋冬的你 王宇良
  14. 14 世界が终わるまでは… WANDS
  15. 15 多想在平庸的生活拥抱你 隔壁老樊
  16. 16 千禧 徐秉龙
  17. 17 我的一个道姑朋友 双笙
  18. 18 大鱼  (Cover 周深) 双笙
  19. 19 霜雪千年(Cover 洛天依 / 乐正绫) 双笙 / 封茗囧菌
  20. 20 云烟成雨(翻自 房东的猫) 周玥
  21. 21 情深深雨濛濛 杨胖雨
  22. 22 Five Hundred Miles Justin Timberlake / Carey Mulligan / Stark Sands
  23. 23 斑马斑马 房东的猫
  24. 24 See You Again Wiz Khalifa / Charlie Puth
  25. 25 Faded Alan Walker / Iselin Solheim
  26. 26 Natural J.Fla
  27. 27 New Soul Vox Angeli
  28. 28 ハレハレヤ(朗朗晴天)(翻自 v flower) 猫瑾
  29. 29 像鱼 王贰浪
  30. 30 Bye Bye Bye Lovestoned
  31. 31 Blame You 眠 / Lopu$
  32. 32 Believer J.Fla
  33. 33 书信 戴羽彤
  34. 34 柴 鱼 の c a l l i n g【已售】 幸子小姐拜托了
  35. 35 夜空中最亮的星(翻自 逃跑计划) 戴羽彤
  36. 36 慢慢喜欢你 LIve版(翻自 莫文蔚) 戴羽彤
  37. 37 病变(翻自 cubi) 戴羽彤
  38. 38 那女孩对我说 (完整版) Uu
  39. 39 绿色 陈雪凝
  40. 40 月牙湾 LIve版(翻自 F.I.R.) 戴羽彤
云烟成雨(翻自 房东的猫) - 周玥
00:00 / 04:00
An audio error has occurred, player will skip forward in 2 seconds.

作曲 : 少年佩

作词 : 墨鱼丝

作曲 : 少年佩

作词 : 墨鱼丝

制作人:黎偌天

编曲:黎偌天

监制:李纤橙

你的晚安 是下意识的恻隐

我留至夜深 治疗失眠梦呓

那封手写信 留在行李箱底

来不及 赋予它旅途的意义

若一切 都已云烟成雨

我能否 变成淤泥

再一次 沾染你

若生命 如过场电影

Oh让我再一次 甜梦里惊醒

我多想再见你

哪怕匆匆一眼就别离

路灯下昏黄的剪影

越走越漫长的林径

我多想再见你

至少玩笑话还能说起

街巷初次落叶的秋分

渐行渐远去的我们

若一切 都已云烟成雨

我能否 变成淤泥

再一次 沾染你

若生命 如过场电影

Oh让我再一次 甜梦里惊醒

我多想再见你

哪怕匆匆一眼就别离

路灯下昏黄的剪影

越走越漫长的林径

我多想再见你

至少玩笑话还能说起

街巷初次落叶的秋分

渐行渐远去的我们

站台 汽笛响起

想念是你的声音

我们提着过去 走入人群

寻找着一个位置 安放自己

我多想再见你

哪怕匆匆一眼就别离

路灯下昏黄的剪影

越走越漫长的林径

我多想再见你

至少玩笑话还能说起

街巷初次落叶的秋分

渐行渐远去的我们

C#多线程等待所有子线程结束

在使用多线程过程中,可能会遇到在一些情况下必须等待子线程全部执行结束后主线程才进行下一步,

做法如下:

 //在使用多线程过程中,可能会遇到在一些情况下必须等待子线程全部执行结束后主线程才进行下一步,做法如下
            List<ManualResetEvent> manualEvents = new List<ManualResetEvent>();//创建线程等待集合
            for (int i = 0; i < 64; i++) //WaitHandles 的数目必须少于或等于 64 个,所以最大线程数为64
            {
                MB m = new MB();//自定义类,用于传参
                m.mre= new ManualResetEvent(false);
                m.ID = i;

                manualEvents.Add(m.mre);
                ThreadPool.QueueUserWorkItem(ThreadMethod, m);
            }
            WaitHandle.WaitAll(manualEvents.ToArray());//等待所有线程结束
            Console.WriteLine("Thread Finished!");
private static void ThreadMethod(object obj)
        {
            MB m = (MB)obj;
            Thread.Sleep(1000);//等待1秒,用于模拟系统在处理事情
            m.mre.Set();//将事件设置为终止状态
            Console.WriteLine("Thread execute:" + m.ID);
        }

 

以上方法在处理时当线程数超过64时报错 WaitHandles 的数目必须少于或等于 64 个,所以最大线程数为64
解决方法如下:

                using (var countdown = new MutipleThreadResetEvent(list.Count))
                {
                    for (int i = 0; i < list.Count; i++)
                    {
                        //开启N个线程,传递MutipleThreadResetEvent对象给子线程
                        Param p = new Param();
                        p.countdown = countdown;
                        p.Path = pa[i];
                        ThreadPool.QueueUserWorkItem(MyHttpRequest, p);
                    }

                    //等待所有线程执行完毕
                    countdown.WaitAll();
                }
public class MutipleThreadResetEvent: IDisposable
    {
        private readonly ManualResetEvent done;
        private readonly int total;
        private long current;

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="total">需要等待执行的线程总数</param>
        public MutipleThreadResetEvent(int total)
        {
            this.total = total;
            current = total;
            done = new ManualResetEvent(false);
        }

        /// <summary>
        /// 唤醒一个等待的线程
        /// </summary>
        public void SetOne()
        {
            // Interlocked 原子操作类 ,此处将计数器减1
            if (Interlocked.Decrement(ref current) == 0)
            {
                //当所以等待线程执行完毕时,唤醒等待的线程
                done.Set();
            }
        }

        /// <summary>
        /// 等待所以线程执行完毕
        /// </summary>
        public void WaitAll()
        {
            done.WaitOne();
        }

        /// <summary>
        /// 释放对象占用的空间
        /// </summary>
        public void Dispose()
        {
            ((IDisposable)done).Dispose();
        }
    }

 

posted @ 2020-08-15 14:00  阿刀-  阅读(2153)  评论(0编辑  收藏  举报