1. Parallel クラス
Parallel クラスはデータとタスクの並列処理を提供します。
2. Paraller.For() メソッドは C# の for ループ ステートメントに似ており、タスクを複数回実行します。 。反復は Paraller.For() メソッドを使用して並列実行できます。反復の順序は定義されていません。
For() メソッドでは、最初の 2 つのパラメーターは固定されており、これらの 2 つのパラメーターはループの開始と終了を定義します。まず最初のメソッド For(int,int,Action
ParallelLoopResult result = Parallel.For(0, 10, i =>{ Console.WriteLine("迭代次数:{0},任务ID:{1},线程ID:{2}", i, Task.CurrentId, Thread.CurrentThread.ManagedThreadId); Thread.Sleep(10); }); Console.WriteLine("是否完成:{0}", result.IsCompleted); Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);
ご覧のとおり、デリゲート メソッドは 10 回実行されており、順序は保証できません。ただし、最下位の反復ではデータが出力されません。これは、Break ステートメントを呼び出す最下位の反復の整数が返されるためです。ここにはブレークがありません。実行中の早い段階で For() メソッドを中断する必要がある場合は、ParallelLoopState を使用して実装できます (For(int,int,Action
ParallelLoopResult result = Parallel.For(0, 10, (i, state) =>{ Console.WriteLine("迭代次数:{0},任务ID:{1},线程ID:{2}", i, Task.CurrentId, Thread.CurrentThread.ManagedThreadId); Thread.Sleep(10);if (i > 5) state.Break(); }); Console.WriteLine("是否完成:{0}", result.IsCompleted); Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);
3. Parallel.ForEach()
Paraller.ForEach() メソッドは IEnumerable を実装するコレクションを走査し、そのメソッドは類似していますforeach ステートメントに追加されますが、非同期に走査され、走査順序はここでは決定されません。まず最初のメソッド Paraller.ForEach
string[] data = { "str1", "str2", "str3" }; ParallelLoopResult result = Parallel.ForEach<string>(data, str => { Console.WriteLine(str); }); Console.WriteLine("是否完成:{0}", result.IsCompleted); Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);
string[] data = { "str1", "str2", "str3", "str4", "str5" }; ParallelLoopResult result = Parallel.ForEach<string>(data, (str, state, i) => { Console.WriteLine("迭代次数:{0},{1}", i, str); if (i > 3) state.Break(); }); Console.WriteLine("是否完成:{0}", result.IsCompleted); Console.WriteLine("最低迭代:{0}", result.LowestBreakIteration);
出力結果は次のようになります
Parallel.Invoke() メソッド。タスク並列モードを提供します。 Paraller.Invoke() メソッドでは、実行するメソッドを指定できる Action デリゲート配列を渡すことができます。以下の例を参照してください。出力結果は次のとおりです。
5. 結論
Parallel.For() Paraller.ForEach() メソッドは各反復で同じコードを呼び出しますが、Parallel.Invoke() メソッドは異なるメソッドを同時に呼び出すことができます。 Parallel.ForEach() はデータ並列処理に使用され、Parallel.Invoke() はタスク並列処理に使用されます。
以上がC# 並列タスクの Parallel クラスの紹介例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。