c#task list waitall task waitany


上邊的主線程會被卡住:

 7個同時開發,誰先完成之后, 需要完成某個工作,可以用waitany

2: 不卡界面的做法

加上以上命令就不卡,是子線程做的事

 

   //Task task = taskFactory.StartNew(action);
            Console.WriteLine("Eleven老師接到一個項目");
            Console.WriteLine("溝通需求,談妥價格");
            Console.WriteLine("簽合同,收取50%的費用");
            Console.WriteLine("高級班篩選學員,組建團隊");
            Console.WriteLine("詳細的需求分析、系統設計、模塊划分、框架搭建");
            Console.WriteLine("開始干活。。。");
            Console.WriteLine(" ");

            List<Task> taskList = new List<Task>();

            taskList.Add(taskFactory.StartNew(() => this.Coding("渾無痕", "Portal")));
            taskList.Add(taskFactory.StartNew(() => this.Coding(" 菜鳥 ", "BackService")));
            taskList.Add(taskFactory.StartNew(() => this.Coding("oldwork", "Client")));
            taskList.Add(taskFactory.StartNew(() => this.Coding("", "WeChatClient")));
            taskList.Add(taskFactory.StartNew(() => this.Coding("走自己的路", "  WCF  ")));
            taskList.Add(taskFactory.StartNew(() => this.Coding("滑豬小板", "  DB  ")));
            taskList.Add(taskFactory.StartNew(() => this.Coding("Walden", "小程序")));

            //都開發完成后,進行聯調測試  不是我做的,是開發者

            taskFactory.ContinueWhenAny(taskList.ToArray(),
                t => Console.WriteLine("第一個完成的,獲取紅包獎勵,{0}", Thread.CurrentThread.ManagedThreadId));

            taskFactory.ContinueWhenAll(taskList.ToArray(),
                tList => Console.WriteLine("都開發完成后,開始聯調測試,{0}", Thread.CurrentThread.ManagedThreadId));

            Task.WaitAny(taskList.ToArray());//等待任意一個任務的完成,會卡主當前的運行線程
            Console.WriteLine("某個模塊完成開發后,老師再收取20%的費用");

            Task.WaitAll(taskList.ToArray());//等待全部任務的完成,會卡主當前的運行線程


            Console.WriteLine("項目開發驗收完成后,老師去收取全部的費用");
            Console.WriteLine("老師給大家分錢。。。");


            Console.WriteLine("******************btnTask_Click 異步方法 end   {0}********************", Thread.CurrentThread.ManagedThreadId);
            Console.WriteLine();
        }

        /// <summary>
        /// Coding
        /// </summary>
        /// <param name="name"></param>
        private void Coding(string name, string project)
        {
            Console.WriteLine("******************Coding start {0} {1} {2} {3}********************",
                name, project, Thread.CurrentThread.ManagedThreadId.ToString("00"), DateTime.Now.ToString("HHmmss:fff"));

            long lResult = 0;
            for (int i = 0; i < 100000000; i++)
            {
                lResult += i;
            }
            Thread.Sleep(2000);

            Console.WriteLine("******************Coding   end {0} {1} {2} {3}********************",
                name, project, Thread.CurrentThread.ManagedThreadId.ToString("00"), DateTime.Now.ToString("HHmmss:fff"));
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM