C # 작업이 완료 실행에 모든 스레드를 기다리는 병렬 작업을 멀티 스레드

실행 작업의 모든 스레드 대기하는 방법 C #을 멀티 스레딩이 그것을 완료? 4.0 4.0의 .NET에서 Task.WaitAll 모든 기다릴 방법이있다 (작업 [] 작업 PARAMS) 작업 [], 추가 작업 없이도. 마이크로 소프트의 공식 문서에 따르면, 나는 설명하고 디버깅하기 위해 예를 썼다 :

 

시스템을 사용하여;
System.Collections.Generic을 사용함;
을 System.Linq을 사용함;
System.Text을 사용함; 하여 System.Threading을 사용함; System.Threading.Tasks을 사용함; 네임 스페이스 ConsoleApp { 클래스 프로그램 { 정적 무효 메인 ( 문자열 []에 args) { var에 서점 = 새로운 서점 (); bookShop.Run (); }} pulic 클래스 예약 { 공공 INT의 아이디 { GET; 세트; } 공공 문자열 이름 { GET; 세트; }} 공용 클래스 서점 {랜덤 랜드 = 새로운 무작위 (); 큐 <예약> = queueBook 새로운 큐 <북> ();INT 최대 = 10000; INT는 EachCount = 500; INT의 CUr는 = 0; 보이드 LoadData ( ) { 경우 (현재> = 최대) { //의 CUr> = 최대 리턴 Console.WriteLine을가 (경우에 "최대 값에 도달!"); 반환; } Console.WriteLine ( "데이터로드 ..."); 대 ( INT I = CUr 코드; I <EachCount +의 CUr; I ++) {Thread.sleep를 ( 10); Console.Write (ⅰ + ""); // 큐 <예약> queueBook.Enqueue에 데이터 삽입 ( 신서 {식 I, NAME = "Name_"} + I); } Console.WriteLine ( ""); CUR + = EachCount; Console.WriteLine는 ( "데이터가 성공적으로로드, {0} ...", queueBook.Count);) {LoadData (); Console.WriteLine ( "작업을 시작했습니다 ..."); {작업 [] 작업을 수행 = 새 작업 [ 10] (위한 INT 난 = <나는 0 {작업 [I] = Task.Factory.StartNew (() = I ++ 10 DoSomeWork ()을> 1000 * 1)); } 전체에 대한 모든 작업을 기다립니다 ////. Task.WaitAll (작업); // 큐 <도서> 비어있는 경우, 데이터를 다시로드 ... LoadData (); } 동안 (queueBook.Count> 0); //의 CUr> = 맥스 루프 동안 Console.WriteLine을 (깰 때 "모든 작업을 완료했습니다."); Console.ReadKey (); } 공극 DoSomeWork ( INT의 발) { 동안 (queueBook.Count> 0) { VAR m = queueBook.Dequeue (); Console.WriteLine ("DoSomeWork 시작, 나는 현재 스레드 ID를 {0} = {1} ..."m.Id, Thread.CurrentThread.ManagedThreadId); VAR의 수면 (rand.Next = 10, 200); // 뭔가를 척. Thread.sleep를 (수면); Console.WriteLine는 ( "DoSomeWork가 완료된 수면은 : {0}, 난 = {1}"잠 m.Id); }}}}

추천

출처www.cnblogs.com/zoumm/p/11973830.html