上邊的主線程會被卡住:
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")); }