1. 병렬 클래스
병렬 클래스는 데이터 및 작업 병렬성을 제공합니다.
2. Paraller.For()
Paraller.For() 메서드는 C#의 for 루프 문과 유사하며 작업을 여러 번 실행합니다. . Paraller.For() 메서드를 사용하여 반복을 병렬로 실행할 수 있습니다. 반복 순서는 정의되지 않습니다.
For() 메서드에서 처음 두 매개 변수는 고정되어 있으며 이 두 매개 변수는 루프의 시작과 끝을 정의합니다. 먼저 첫 번째 메서드 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);
출력 결과는 다음과 같습니다.
또한 For와 같이 반복 횟수와 ParallelLoopState를 전달합니다. 메서드는 ForEach
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);
출력 결과는 다음과 같습니다.
4. Parallel.Invoke()
작업 병렬 모드를 제공하는 Parallel.Invoke() 메서드입니다. Paraller.Invoke() 메서드를 사용하면 실행해야 하는 메서드를 지정할 수 있는 Action 대리자 배열을 전달할 수 있습니다. 아래 예를 참조하세요.
Parallel.Invoke(() =>{ Thread.Sleep(100); Console.WriteLine("method1"); }, () =>{ Thread.Sleep(10); Console.WriteLine("method2"); });
출력 결과는 다음과 같습니다.
5. 결론
Parallel.For() Paraller.ForEach() 메서드는 각 반복에서 동일한 코드를 호출하는 반면 Parallel.Invoke() 메서드를 사용하면 여러 메서드를 동시에 호출할 수 있습니다. Parallel.ForEach()는 데이터 병렬 처리에 사용되고 Parallel.Invoke()는 작업 병렬 처리에 사용됩니다.
위 내용은 C# 병렬 작업의 Parallel 클래스에 대한 소개 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!