C#のタスクが完了し、実行するすべてのスレッドを待って並列タスクをマルチスレッド化

実行タスクの全てのスレッドを待機するマルチスレッドのC#は、それを完了していますか?4.0以降への.NET 4.0では、そこTask.WaitAllは、追加の操作を必要とせずに、すべてのタスク[]を待つ方法(タスク[]タスクparamsは)を。Microsoftの公式ドキュメントによると、私が説明するために例を書いたとデバッグ:

 

システムを使用しました。
System.Collections.Genericを使用しました。
System.Linqのを使用しました。
System.Textのを使用しました。 System.Threadingを使用しました。 System.Threading.Tasksを使用しました。名前空間ConsoleApp { クラスプログラム{ 静的な無効メイン(文字列[] argsを){ VAR書店= 新しい本屋(); bookShop.Run(); }} pulic クラス帳{ 公共のint Idを{ 取得します。セット; } パブリック文字列名前{ 得ます。セット; }} パブリッククラス書店{ランダムランド= 新しいランダム(); キュー<ブック> queueBook = 新しいキュー<ブック>();int型の最大= 10000; int型EachCount = 500; INTたCur = 0; loaddataの(){ {(たCur> =最大)場合//ときたCur> =マックス、リターンConsole.WriteLineを("最大値に達し!"); リターン; } Console.WriteLineを("データロード...")。用(INT I =たCur; I <EachCount +たCur; I ++){のThread.sleep(10)。Console.Write(I + "「); //キュー<ブック> queueBook.Enqueueへのデータ挿入(新規予約{ID = I、NAME = "名_" + I})。} Console.WriteLineを("")。CUR + = EachCount。Console.WriteLineを("データが正常にロードされ、{0} ..."、queueBook.Count)。) { データを読み込む(); Console.WriteLineを("作業が開始しています..."); {タスク[]のタスクを実行= 新しいタスク[ 10]。用(INT iは= 0; I < 10; I ++){タスク[I] = Task.Factory.StartNew(()=> DoSomeWork(×1000 1))。} ////完全にすべてのタスクを待ちます。Task.WaitAll(タスク)。//キュー<ブック>が空の場合、リロードデータ... loaddataの(); } 一方(queueBook.Count> 0)。//たCur> =マックスは、whileループます。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}、I {1} ="、睡眠、m.Id)を、}}}}

おすすめ

転載: www.cnblogs.com/zoumm/p/11973830.html