Parallel.ForEach 메서드

정의

반복이 병렬로 실행될 수 있는 foreach(Visual Basic의 경우 For Each ) 작업을 실행합니다.

오버로드

ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

스레드 로컬 데이터를 사용하여 반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

64비트 인덱스와 스레드 로컬 데이터를 사용하여 반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

ForEach<TSource,TLocal>(Partitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

스레드 로컬 데이터를 사용하여 반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 Partitioner에 대해 실행합니다.

ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

반복이 foreach 병렬로 실행될 수 있는 에서 64비트 인덱스와 스레드 로컬 데이터를 OrderablePartitioner<TSource> 사용하여 (For Each Visual Basic의 경우) 작업을 실행하고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링하고 조작할 수 있습니다.

ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

스레드 로컬 데이터를 사용하여 반복을 병렬로 실행할 수 있고 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

스레드 로컬 데이터를 사용하여 반복을 병렬로 실행할 수 있고 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

ForEach<TSource,TLocal>(Partitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

스레드 로컬 데이터를 사용하여 반복을 병렬로 실행할 수 있고 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 Partitioner에 대해 실행합니다.

ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

스레드 로컬 데이터를 사용하여 반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 OrderablePartitioner<TSource>에 대해 실행합니다.

ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource>)

반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)

반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)

반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 OrderablePartitioner<TSource>에 대해 실행합니다.

ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource>)

반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 Partitioner에 대해 실행합니다.

ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)

64비트 인덱스를 사용하여 반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

ForEach<TSource>(Partitioner<TSource>, Action<TSource,ParallelLoopState>)

반복을 병렬로 실행할 수 있고 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 Partitioner에 대해 실행합니다.

ForEach<TSource>(Partitioner<TSource>, Action<TSource>)

반복이 병렬로 실행될 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 Partitioner 작업을 실행합니다.

ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState,Int64>)

64비트 인덱스를 사용하여 반복을 병렬로 실행할 수 있고 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

ForEach<TSource>(OrderablePartitioner<TSource>, Action<TSource,ParallelLoopState,Int64>)

반복을 병렬로 실행할 수 있고 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 OrderablePartitioner<TSource>에 대해 실행합니다.

ForEach<TSource>(IEnumerable<TSource>, Action<TSource>)

반복이 병렬로 실행될 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable 작업을 실행합니다.

ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)

반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 Partitioner에 대해 실행합니다.

ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState>)

반복을 병렬로 실행할 수 있고 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

스레드 로컬 데이터를 사용하여 반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Generic.IEnumerable<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : seq<'Source> * System.Threading.Tasks.ParallelOptions * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As IEnumerable(Of TSource), parallelOptions As ParallelOptions, localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

형식 매개 변수

TSource

소스의 데이터 형식입니다.

TLocal

스레드 로컬 데이터의 형식입니다.

매개 변수

source
IEnumerable<TSource>

열거 가능한 데이터 소스입니다.

parallelOptions
ParallelOptions

이 작업의 동작을 구성하는 개체입니다.

localInit
Func<TLocal>

각 작업에 대한 로컬 데이터의 초기 상태를 반환하는 함수 대리자입니다.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

반복당 한 번씩 호출되는 대리자입니다.

localFinally
Action<TLocal>

각 작업의 로컬 상태에 대해 최종 동작을 수행하는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

source 인수가 null인 경우

또는

parallelOptions 인수가 null인 경우

또는

body 인수가 null인 경우

또는

localInit 인수가 null인 경우

또는

localFinally 인수가 null인 경우

parallelOptions 인수의 CancellationToken이 취소된 경우

parallelOptionsCancellationTokenSource과 연결된 CancellationToken가 삭제되었습니다.

모든 개별 예외를 포함하는 예외는 스레드에서 throw됩니다.

설명

body 대리자는 열거 가능 요소의 각 요소에 source 대해 한 번 호출됩니다. 현재 요소, ParallelLoopState 루프를 조기에 중단하는 데 사용할 수 있는 instance 및 동일한 스레드에서 실행되는 반복 간에 공유될 수 있는 일부 로컬 상태 매개 변수와 함께 제공됩니다.

localInit 대리자는 루프 실행에 참여하고 각 태스크에 대한 초기 로컬 상태를 반환하는 각 태스크에 대해 한 번 호출됩니다. 이러한 초기 상태는 각 작업의 첫 번째 body 호출에 전달됩니다. 그런 다음 모든 후속 본문 호출은 다음 본문 호출에 전달되는 수정된 상태 값을 반환합니다. 마지막으로 각 작업의 마지막 본문 호출은 대리자에게 localFinally 전달되는 상태 값을 반환합니다. localFinally 대리자는 스레드당 한 번 호출되어 각 작업의 로컬 상태에 대한 최종 작업을 수행합니다. 이 대리자는 여러 작업에서 동시에 호출될 수 있습니다. 따라서 공유 변수에 대한 액세스를 동기화해야 합니다.

메서드는 Parallel.ForEach 기존 작업이 완료되고 새 작업으로 대체되기 때문에 실행 수명 동안 스레드보다 더 많은 작업을 사용할 수 있습니다. 이렇게 하면 기본 개체가 루프를 서비스하는 TaskScheduler 스레드를 추가, 변경 또는 제거할 수 있습니다.

추가 정보

적용 대상

ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

64비트 인덱스와 스레드 로컬 데이터를 사용하여 반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, long, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Generic.IEnumerable<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,long,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : seq<'Source> * System.Threading.Tasks.ParallelOptions * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, int64, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As IEnumerable(Of TSource), parallelOptions As ParallelOptions, localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, Long, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

형식 매개 변수

TSource

소스의 데이터 형식입니다.

TLocal

스레드 로컬 데이터의 형식입니다.

매개 변수

source
IEnumerable<TSource>

열거 가능한 데이터 소스입니다.

parallelOptions
ParallelOptions

이 작업의 동작을 구성하는 개체입니다.

localInit
Func<TLocal>

각 작업에 대한 로컬 데이터의 초기 상태를 반환하는 함수 대리자입니다.

body
Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>

반복당 한 번씩 호출되는 대리자입니다.

localFinally
Action<TLocal>

각 작업의 로컬 상태에 대해 최종 동작을 수행하는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

source 인수가 null인 경우

또는

parallelOptions 인수가 null인 경우

또는

body 인수가 null인 경우

또는

localInit 인수가 null인 경우

또는

localFinally 인수가 null인 경우

parallelOptions 인수의 CancellationToken이 취소된 경우

parallelOptionsCancellationTokenSource과 연결된 CancellationToken가 삭제되었습니다.

모든 개별 예외를 포함하는 예외는 스레드에서 throw됩니다.

설명

body 대리자는 열거 가능 요소의 각 요소에 source 대해 한 번 호출됩니다. 현재 요소, ParallelLoopState 루프를 조기에 중단하는 데 사용할 수 있는 instance, 현재 요소의 인덱스(Int64) 및 동일한 스레드에서 실행되는 반복 간에 공유될 수 있는 일부 로컬 상태 매개 변수와 함께 제공됩니다.

localInit 대리자는 루프 실행에 참여하고 각 태스크에 대한 초기 로컬 상태를 반환하는 각 태스크에 대해 한 번 호출됩니다. 이러한 초기 상태는 각 작업의 첫 번째 body 호출에 전달됩니다. 그런 다음 모든 후속 본문 호출은 다음 본문 호출에 전달되는 수정된 상태 값을 반환합니다. 마지막으로 각 작업의 마지막 본문 호출은 대리자에게 localFinally 전달되는 상태 값을 반환합니다. localFinally 대리자는 스레드당 한 번 호출되어 각 작업의 로컬 상태에 대한 최종 작업을 수행합니다. 이 대리자는 여러 작업에서 동시에 호출될 수 있습니다. 따라서 공유 변수에 대한 액세스를 동기화해야 합니다.

메서드는 Parallel.ForEach 기존 작업이 완료되고 새 작업으로 대체되기 때문에 실행 수명 동안 스레드보다 더 많은 작업을 사용할 수 있습니다. 이렇게 하면 기본 개체가 루프를 서비스하는 TaskScheduler 스레드를 추가, 변경 또는 제거할 수 있습니다.

추가 정보

적용 대상

ForEach<TSource,TLocal>(Partitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

스레드 로컬 데이터를 사용하여 반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 Partitioner에 대해 실행합니다.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::Partitioner<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Concurrent.Partitioner<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : System.Collections.Concurrent.Partitioner<'Source> * System.Threading.Tasks.ParallelOptions * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As Partitioner(Of TSource), parallelOptions As ParallelOptions, localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

형식 매개 변수

TSource

source의 요소 형식입니다.

TLocal

스레드 로컬 데이터의 형식입니다.

매개 변수

source
Partitioner<TSource>

원래 데이터 소스가 포함된 Partitioner입니다.

parallelOptions
ParallelOptions

이 작업의 동작을 구성하는 개체입니다.

localInit
Func<TLocal>

각 작업에 대한 로컬 데이터의 초기 상태를 반환하는 함수 대리자입니다.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

반복당 한 번씩 호출되는 대리자입니다.

localFinally
Action<TLocal>

각 작업의 로컬 상태에 대해 최종 동작을 수행하는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

source 인수가 null인 경우

또는

parallelOptions 인수가 null인 경우

또는

body 인수가 null인 경우

또는

localInit 인수가 null인 경우

또는

localFinally 인수가 null인 경우

sourceSupportsDynamicPartitionsPartitioner 속성은 false를 반환하거나 파티셔너가 null 파티션을 반환합니다.

모든 개별 예외를 포함하는 예외는 스레드에서 throw됩니다.

parallelOptions 인수의 CancellationToken이 취소된 경우

parallelOptionsCancellationTokenSource과 연결된 CancellationToken가 삭제되었습니다.

설명

이 오버로드는 기본 분할 체계를 재정의하려는 시나리오에 대해 제공됩니다. 예를 들어 작은 루프 본문은 범위를 분할하면 도움이 될 수 있습니다. 메서드는 ForEach 사용자 지정 파티셔너가 동적 분할을 지원할 것으로 예상합니다. 이 오버로드는 정적 범위 분할의 이점을 얻을 수 있는 작은 루프 본문이 있는 시나리오에 대해 제공됩니다. 파티셔너가 동적 파티션을 지원해야 합니다. 자세한 내용은 PLINQ 및 TPL용 사용자 지정 파티셔너 및방법: 동적 파티션 구현을 참조하세요.

localInit 대리자는 루프 실행에 참여하고 각 태스크에 대한 초기 로컬 상태를 반환하는 각 태스크에 대해 한 번 호출됩니다. 이러한 초기 상태는 각 작업의 첫 번째 body 호출에 전달됩니다. 그런 다음 모든 후속 본문 호출은 다음 본문 호출에 전달되는 수정된 상태 값을 반환합니다. 마지막으로 각 작업의 마지막 본문 호출은 대리자에게 localFinally 전달되는 상태 값을 반환합니다. localFinally 대리자는 각 태스크의 로컬 상태에 대한 최종 작업을 수행하기 위해 태스크당 한 번 호출됩니다. 이 대리자는 여러 작업에서 동시에 호출될 수 있습니다. 따라서 공유 변수에 대한 액세스를 동기화해야 합니다.

메서드는 Parallel.ForEach 기존 작업이 완료되고 새 작업으로 대체되기 때문에 실행 수명 동안 스레드보다 더 많은 작업을 사용할 수 있습니다. 이렇게 하면 기본 개체가 루프를 서비스하는 TaskScheduler 스레드를 추가, 변경 또는 제거할 수 있습니다.

추가 정보

적용 대상

ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

반복이 foreach 병렬로 실행될 수 있는 에서 64비트 인덱스와 스레드 로컬 데이터를 OrderablePartitioner<TSource> 사용하여 (For Each Visual Basic의 경우) 작업을 실행하고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링하고 조작할 수 있습니다.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::OrderablePartitioner<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, long, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Concurrent.OrderablePartitioner<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,long,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : System.Collections.Concurrent.OrderablePartitioner<'Source> * System.Threading.Tasks.ParallelOptions * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, int64, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As OrderablePartitioner(Of TSource), parallelOptions As ParallelOptions, localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, Long, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

형식 매개 변수

TSource

source의 요소 형식입니다.

TLocal

스레드 로컬 데이터의 형식입니다.

매개 변수

source
OrderablePartitioner<TSource>

원래 데이터 소스가 포함된 정렬할 수 있는 파티셔너입니다.

parallelOptions
ParallelOptions

이 작업의 동작을 구성하는 개체입니다.

localInit
Func<TLocal>

각 작업에 대한 로컬 데이터의 초기 상태를 반환하는 함수 대리자입니다.

body
Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>

반복당 한 번씩 호출되는 대리자입니다.

localFinally
Action<TLocal>

각 작업의 로컬 상태에 대해 최종 동작을 수행하는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

source 인수가 null인 경우

또는

parallelOptions 인수가 null인 경우

또는

body 인수가 null인 경우

또는

localInit 또는 localFinally 인수가 null인 경우

sourceSupportsDynamicPartitionsPartitioner 속성은 false를 반환하거나 파티셔너가 null 파티션을 반환합니다.

모든 개별 예외를 포함하는 예외는 스레드에서 throw됩니다.

parallelOptions 인수의 CancellationToken이 취소된 경우

parallelOptionsCancellationTokenSource과 연결된 CancellationToken가 삭제되었습니다.

설명

이 오버로드는 기본 분할 체계를 재정의하려는 시나리오에 대해 제공됩니다. 예를 들어 작은 루프 본문은 범위를 분할하면 도움이 될 수 있습니다. 메서드는 ForEach 사용자 지정 파티셔너가 동적 분할을 지원할 것으로 예상합니다. 자세한 내용은 PLINQ 및 TPL용 사용자 지정 파티셔너 및방법: 동적 파티션 구현을 참조하세요.

localInit 대리자는 루프 실행에 참여하고 각 태스크에 대한 초기 로컬 상태를 반환하는 각 태스크에 대해 한 번 호출됩니다. 이러한 초기 상태는 각 작업의 첫 번째 body 호출에 전달됩니다. 그런 다음 모든 후속 본문 호출은 다음 본문 호출에 전달되는 수정된 상태 값을 반환합니다. 마지막으로 각 스레드의 마지막 본문 호출은 대리자에게 localFinally 전달되는 상태 값을 반환합니다. localFinally 대리자는 각 태스크의 로컬 상태에 대한 최종 작업을 수행하기 위해 태스크당 한 번 호출됩니다. 이 대리자는 여러 작업에서 동시에 호출될 수 있습니다. 따라서 공유 변수에 대한 액세스를 동기화해야 합니다.

메서드는 Parallel.ForEach 기존 작업이 완료되고 새 작업으로 대체되기 때문에 실행 수명 동안 스레드보다 더 많은 작업을 사용할 수 있습니다. 이렇게 하면 기본 개체가 루프를 서비스하는 TaskScheduler 스레드를 추가, 변경 또는 제거할 수 있습니다.

추가 정보

적용 대상

ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

스레드 로컬 데이터를 사용하여 반복을 병렬로 실행할 수 있고 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Generic.IEnumerable<TSource> source, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : seq<'Source> * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As IEnumerable(Of TSource), localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

형식 매개 변수

TSource

소스의 데이터 형식입니다.

TLocal

스레드 로컬 데이터의 형식입니다.

매개 변수

source
IEnumerable<TSource>

열거 가능한 데이터 소스입니다.

localInit
Func<TLocal>

각 작업에 대한 로컬 데이터의 초기 상태를 반환하는 함수 대리자입니다.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

반복당 한 번씩 호출되는 대리자입니다.

localFinally
Action<TLocal>

각 작업의 로컬 상태에 대해 최종 동작을 수행하는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

source 인수가 null인 경우

또는

body 인수가 null인 경우

또는

localInit 인수가 null인 경우

또는

localFinally 인수가 null인 경우

모든 개별 예외를 포함하는 예외는 스레드에서 throw됩니다.

예제

다음 예제에서는 로컬 상태의 메서드를 ForEach 사용하는 방법을 보여줍니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

class ForEachWithThreadLocal
{
    // Demonstrated features:
    // 		Parallel.ForEach()
    //		Thread-local state
    // Expected results:
    //      This example sums up the elements of an int[] in parallel.
    //      Each thread maintains a local sum. When a thread is initialized, that local sum is set to 0.
    //      On every iteration the current element is added to the local sum.
    //      When a thread is done, it safely adds its local sum to the global sum.
    //      After the loop is complete, the global sum is printed out.
    // Documentation:
    //		http://msdn.microsoft.com/library/dd990270(VS.100).aspx
    static void Main()
    {
        // The sum of these elements is 40.
        int[] input = { 4, 1, 6, 2, 9, 5, 10, 3 };
        int sum = 0;

        try
        {
            Parallel.ForEach(
                    input,					        // source collection
                    () => 0,					        // thread local initializer
                    (n, loopState, localSum) =>		// body
                    {
                        localSum += n;
                        Console.WriteLine("Thread={0}, n={1}, localSum={2}", Thread.CurrentThread.ManagedThreadId, n, localSum);
                        return localSum;
                    },
                    (localSum) => Interlocked.Add(ref sum, localSum)					// thread local aggregator
                );

            Console.WriteLine("\nSum={0}", sum);
        }
        // No exception is expected in this example, but if one is still thrown from a task,
        // it will be wrapped in AggregateException and propagated to the main thread.
        catch (AggregateException e)
        {
            Console.WriteLine("Parallel.ForEach has thrown an exception. THIS WAS NOT EXPECTED.\n{0}", e);
        }
    }
}
Imports System.Threading
Imports System.Threading.Tasks

Module ForEachDemo

    ' Demonstrated features:
    '   Parallel.ForEach()
    '   Thread-local state
    ' Expected results:
    '   This example sums up the elements of an int[] in parallel.
    '   Each thread maintains a local sum. When a thread is initialized, that local sum is set to 0.
    '   On every iteration the current element is added to the local sum.
    '   When a thread is done, it safely adds its local sum to the global sum.
    '   After the loop is complete, the global sum is printed out.
    ' Documentation:
    '   http://msdn.microsoft.com/library/dd990270(VS.100).aspx
    Private Sub ForEachDemo()
        ' The sum of these elements is 40.
        Dim input As Integer() = {4, 1, 6, 2, 9, 5, _
        10, 3}
        Dim sum As Integer = 0

        Try
            ' source collection
            Parallel.ForEach(input,
                             Function()
                                 ' thread local initializer
                                 Return 0
                             End Function,
                             Function(n, loopState, localSum)
                                 ' body
                                 localSum += n
                                 Console.WriteLine("Thread={0}, n={1}, localSum={2}", Thread.CurrentThread.ManagedThreadId, n, localSum)
                                 Return localSum
                             End Function,
                             Sub(localSum)
                                 ' thread local aggregator
                                 Interlocked.Add(sum, localSum)
                             End Sub)

            Console.WriteLine(vbLf & "Sum={0}", sum)
        Catch e As AggregateException
            ' No exception is expected in this example, but if one is still thrown from a task,
            ' it will be wrapped in AggregateException and propagated to the main thread.
            Console.WriteLine("Parallel.ForEach has thrown an exception. THIS WAS NOT EXPECTED." & vbLf & "{0}", e)
        End Try
    End Sub


End Module

설명

body 대리자는 열거 가능 요소의 각 요소에 source 대해 한 번 호출됩니다. 현재 요소, ParallelLoopState 루프를 조기에 중단하는 데 사용할 수 있는 instance 및 동일한 스레드에서 실행되는 반복 간에 공유될 수 있는 일부 로컬 상태 매개 변수와 함께 제공됩니다.

localInit 대리자는 루프 실행에 참여하고 각 태스크에 대한 초기 로컬 상태를 반환하는 각 태스크에 대해 한 번 호출됩니다. 이러한 초기 상태는 각 작업의 첫 번째 body 호출에 전달됩니다. 그런 다음 모든 후속 본문 호출은 다음 본문 호출에 전달되는 수정된 상태 값을 반환합니다. 마지막으로 각 작업의 마지막 본문 호출은 대리자에게 localFinally 전달되는 상태 값을 반환합니다. localFinally 대리자는 스레드당 한 번 호출되어 각 작업의 로컬 상태에 대한 최종 작업을 수행합니다. 이 대리자는 여러 작업에서 동시에 호출될 수 있습니다. 따라서 공유 변수에 대한 액세스를 동기화해야 합니다.

메서드는 Parallel.ForEach 기존 작업이 완료되고 새 작업으로 대체되기 때문에 실행 수명 동안 스레드보다 더 많은 작업을 사용할 수 있습니다. 이렇게 하면 기본 개체가 루프를 서비스하는 TaskScheduler 스레드를 추가, 변경 또는 제거할 수 있습니다.

추가 정보

적용 대상

ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

스레드 로컬 데이터를 사용하여 반복을 병렬로 실행할 수 있고 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, long, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Generic.IEnumerable<TSource> source, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,long,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : seq<'Source> * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, int64, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As IEnumerable(Of TSource), localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, Long, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

형식 매개 변수

TSource

소스의 데이터 형식입니다.

TLocal

스레드 로컬 데이터의 형식입니다.

매개 변수

source
IEnumerable<TSource>

열거 가능한 데이터 소스입니다.

localInit
Func<TLocal>

각 작업에 대한 로컬 데이터의 초기 상태를 반환하는 함수 대리자입니다.

body
Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>

반복당 한 번씩 호출되는 대리자입니다.

localFinally
Action<TLocal>

각 작업의 로컬 상태에 대해 최종 동작을 수행하는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

source 인수가 null인 경우

또는

body 인수가 null인 경우

또는

localInit 인수가 null인 경우

또는

localFinally 인수가 null인 경우

모든 개별 예외를 포함하는 예외는 스레드에서 throw됩니다.

설명

body 대리자는 열거 가능 요소의 각 요소에 source 대해 한 번 호출됩니다. 현재 요소, ParallelLoopState 루프를 조기에 중단하는 데 사용할 수 있는 instance, 현재 요소의 인덱스(Int64) 및 동일한 스레드에서 실행되는 반복 간에 공유될 수 있는 일부 로컬 상태 매개 변수와 함께 제공됩니다.

localInit 대리자는 루프 실행에 참여하고 각 태스크에 대한 초기 로컬 상태를 반환하는 각 태스크에 대해 한 번 호출됩니다. 이러한 초기 상태는 각 작업의 첫 번째 body 호출에 전달됩니다. 그런 다음 모든 후속 본문 호출은 다음 본문 호출에 전달되는 수정된 상태 값을 반환합니다. 마지막으로 각 작업의 마지막 본문 호출은 대리자에게 localFinally 전달되는 상태 값을 반환합니다. localFinally 대리자는 각 태스크의 로컬 상태에 대한 최종 작업을 수행하기 위해 태스크당 한 번 호출됩니다. 이 대리자는 여러 작업에서 동시에 호출될 수 있습니다. 따라서 공유 변수에 대한 액세스를 동기화해야 합니다.

메서드는 Parallel.ForEach 기존 작업이 완료되고 새 작업으로 대체되기 때문에 실행 수명 동안 스레드보다 더 많은 작업을 사용할 수 있습니다. 이렇게 하면 기본 개체가 루프를 서비스하는 TaskScheduler 스레드를 추가, 변경 또는 제거할 수 있습니다.

추가 정보

적용 대상

ForEach<TSource,TLocal>(Partitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

스레드 로컬 데이터를 사용하여 반복을 병렬로 실행할 수 있고 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 Partitioner에 대해 실행합니다.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::Partitioner<TSource> ^ source, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Concurrent.Partitioner<TSource> source, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : System.Collections.Concurrent.Partitioner<'Source> * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As Partitioner(Of TSource), localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

형식 매개 변수

TSource

source의 요소 형식입니다.

TLocal

스레드 로컬 데이터의 형식입니다.

매개 변수

source
Partitioner<TSource>

원래 데이터 소스가 포함된 Partitioner입니다.

localInit
Func<TLocal>

각 작업에 대한 로컬 데이터의 초기 상태를 반환하는 함수 대리자입니다.

body
Func<TSource,ParallelLoopState,TLocal,TLocal>

반복당 한 번씩 호출되는 대리자입니다.

localFinally
Action<TLocal>

각 작업의 로컬 상태에 대해 최종 동작을 수행하는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

source 인수가 null인 경우

또는

body 인수가 null인 경우

또는

localInit 인수가 null인 경우

또는

localFinally 인수가 null인 경우

sourceSupportsDynamicPartitionsPartitioner 속성은 false를 반환하거나 파티셔너가 null 파티션을 반환합니다.

모든 개별 예외를 포함하는 예외는 스레드에서 throw됩니다.

설명

이 오버로드는 기본 분할 체계를 재정의하려는 시나리오에 대해 제공됩니다. 예를 들어 작은 루프 본문은 범위를 분할하면 도움이 될 수 있습니다. 메서드는 ForEach 사용자 지정 파티셔너가 동적 분할을 지원할 것으로 예상합니다. 자세한 내용은 PLINQ 및 TPL용 사용자 지정 파티셔너 및방법: 동적 파티션 구현을 참조하세요.

localInit 대리자는 루프 실행에 참여하고 각 태스크에 대한 초기 로컬 상태를 반환하는 각 스레드에 대해 한 번 호출됩니다. 이러한 초기 상태는 각 작업의 첫 번째 body 호출에 전달됩니다. 그런 다음 모든 후속 본문 호출은 다음 본문 호출에 전달되는 수정된 상태 값을 반환합니다. 마지막으로 각 작업의 마지막 본문 호출은 대리자에게 localFinally 전달되는 상태 값을 반환합니다. localFinally 대리자는 각 태스크의 로컬 상태에 대한 최종 작업을 수행하기 위해 태스크당 한 번 호출됩니다. 이 대리자는 여러 작업에서 동시에 호출될 수 있습니다. 따라서 공유 변수에 대한 액세스를 동기화해야 합니다.

메서드는 Parallel.ForEach 기존 작업이 완료되고 새 작업으로 대체되기 때문에 실행 수명 동안 스레드보다 더 많은 작업을 사용할 수 있습니다. 이렇게 하면 기본 개체가 루프를 서비스하는 TaskScheduler 스레드를 추가, 변경 또는 제거할 수 있습니다.

추가 정보

적용 대상

ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

스레드 로컬 데이터를 사용하여 반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 OrderablePartitioner<TSource>에 대해 실행합니다.

public:
generic <typename TSource, typename TLocal>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::OrderablePartitioner<TSource> ^ source, Func<TLocal> ^ localInit, Func<TSource, System::Threading::Tasks::ParallelLoopState ^, long, TLocal, TLocal> ^ body, Action<TLocal> ^ localFinally);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource,TLocal> (System.Collections.Concurrent.OrderablePartitioner<TSource> source, Func<TLocal> localInit, Func<TSource,System.Threading.Tasks.ParallelLoopState,long,TLocal,TLocal> body, Action<TLocal> localFinally);
static member ForEach : System.Collections.Concurrent.OrderablePartitioner<'Source> * Func<'Local> * Func<'Source, System.Threading.Tasks.ParallelLoopState, int64, 'Local, 'Local> * Action<'Local> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource, TLocal) (source As OrderablePartitioner(Of TSource), localInit As Func(Of TLocal), body As Func(Of TSource, ParallelLoopState, Long, TLocal, TLocal), localFinally As Action(Of TLocal)) As ParallelLoopResult

형식 매개 변수

TSource

source의 요소 형식입니다.

TLocal

스레드 로컬 데이터의 형식입니다.

매개 변수

source
OrderablePartitioner<TSource>

원래 데이터 소스가 포함된 정렬할 수 있는 파티셔너입니다.

localInit
Func<TLocal>

각 작업에 대한 로컬 데이터의 초기 상태를 반환하는 함수 대리자입니다.

body
Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>

반복당 한 번씩 호출되는 대리자입니다.

localFinally
Action<TLocal>

각 작업의 로컬 상태에 대해 최종 동작을 수행하는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

source 인수가 null인 경우

또는

body 인수가 null인 경우

또는

localInit 인수가 null인 경우

또는

localFinally 인수가 null인 경우

sourceSupportsDynamicPartitionsPartitioner 속성은 false를 반환하거나 파티셔너가 null 파티션을 반환합니다.

모든 개별 예외를 포함하는 예외는 스레드에서 throw됩니다.

설명

이 오버로드는 기본 분할 체계를 재정의하려는 시나리오에 대해 제공됩니다. 예를 들어 작은 루프 본문은 범위를 분할하면 도움이 될 수 있습니다. 메서드는 ForEach 사용자 지정 파티셔너가 동적 분할을 지원할 것으로 예상합니다. 자세한 내용은 PLINQ 및 TPL용 사용자 지정 파티셔너 및방법: 동적 파티션 구현을 참조하세요.

localInit 대리자는 루프 실행에 참여하고 각 태스크에 대한 초기 로컬 상태를 반환하는 각 태스크에 대해 한 번 호출됩니다. 이러한 초기 상태는 각 작업의 첫 번째 body 호출에 전달됩니다. 그런 다음 모든 후속 본문 호출은 다음 본문 호출에 전달되는 수정된 상태 값을 반환합니다. 마지막으로 각 작업의 마지막 본문 호출은 대리자에게 localFinally 전달되는 상태 값을 반환합니다. localFinally 대리자는 각 태스크의 로컬 상태에 대한 최종 작업을 수행하기 위해 태스크당 한 번 호출됩니다. 이 대리자는 여러 작업에서 동시에 호출될 수 있습니다. 따라서 공유 변수에 대한 액세스를 동기화해야 합니다.

메서드는 Parallel.ForEach 기존 작업이 완료되고 새 작업으로 대체되기 때문에 실행 수명 동안 스레드보다 더 많은 작업을 사용할 수 있습니다. 이렇게 하면 기본 개체가 루프를 서비스하는 TaskScheduler 스레드를 추가, 변경 또는 제거할 수 있습니다.

추가 정보

적용 대상

ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Action<TSource> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Generic.IEnumerable<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Action<TSource> body);
static member ForEach : seq<'Source> * System.Threading.Tasks.ParallelOptions * Action<'Source> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As IEnumerable(Of TSource), parallelOptions As ParallelOptions, body As Action(Of TSource)) As ParallelLoopResult

형식 매개 변수

TSource

소스의 데이터 형식입니다.

매개 변수

source
IEnumerable<TSource>

열거 가능한 데이터 소스입니다.

parallelOptions
ParallelOptions

이 작업의 동작을 구성하는 개체입니다.

body
Action<TSource>

반복당 한 번씩 호출되는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

parallelOptions 인수의 CancellationToken이 취소된 경우

source 인수가 null인 경우

또는

parallelOptions 인수가 null인 경우

또는

body 인수가 null인 경우

모든 개별 예외를 포함하는 예외는 스레드에서 throw됩니다.

parallelOptionsCancellationTokenSource과 연결된 CancellationToken가 삭제되었습니다.

설명

body 대리자는 열거 가능 요소의 각 요소에 source 대해 한 번 호출됩니다. 현재 요소와 함께 매개 변수로 제공됩니다.

추가 정보

적용 대상

ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Action<TSource, System::Threading::Tasks::ParallelLoopState ^> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Generic.IEnumerable<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Action<TSource,System.Threading.Tasks.ParallelLoopState> body);
static member ForEach : seq<'Source> * System.Threading.Tasks.ParallelOptions * Action<'Source, System.Threading.Tasks.ParallelLoopState> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As IEnumerable(Of TSource), parallelOptions As ParallelOptions, body As Action(Of TSource, ParallelLoopState)) As ParallelLoopResult

형식 매개 변수

TSource

소스의 데이터 형식입니다.

매개 변수

source
IEnumerable<TSource>

열거 가능한 데이터 소스입니다.

parallelOptions
ParallelOptions

이 작업의 동작을 구성하는 개체입니다.

body
Action<TSource,ParallelLoopState>

반복당 한 번씩 호출되는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

parallelOptions 인수의 CancellationToken이 취소된 경우

source 인수가 null인 경우

또는

parallelOptions 인수가 null인 경우

또는

body 인수가 null인 경우

모든 개별 예외를 포함하는 예외는 스레드에서 throw됩니다.

parallelOptionsCancellationTokenSource과 연결된 CancellationToken가 삭제되었습니다.

설명

body 대리자는 열거 가능 요소의 각 요소에 source 대해 한 번 호출됩니다. 현재 요소 및 ParallelLoopState 루프를 조기에 중단하는 데 사용할 수 있는 instance 매개 변수와 함께 제공됩니다.

추가 정보

적용 대상

ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 OrderablePartitioner<TSource>에 대해 실행합니다.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::OrderablePartitioner<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Action<TSource, System::Threading::Tasks::ParallelLoopState ^, long> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Concurrent.OrderablePartitioner<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Action<TSource,System.Threading.Tasks.ParallelLoopState,long> body);
static member ForEach : System.Collections.Concurrent.OrderablePartitioner<'Source> * System.Threading.Tasks.ParallelOptions * Action<'Source, System.Threading.Tasks.ParallelLoopState, int64> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As OrderablePartitioner(Of TSource), parallelOptions As ParallelOptions, body As Action(Of TSource, ParallelLoopState, Long)) As ParallelLoopResult

형식 매개 변수

TSource

source의 요소 형식입니다.

매개 변수

source
OrderablePartitioner<TSource>

원래 데이터 소스가 포함된 정렬할 수 있는 파티셔너입니다.

parallelOptions
ParallelOptions

이 작업의 동작을 구성하는 개체입니다.

body
Action<TSource,ParallelLoopState,Int64>

반복당 한 번씩 호출되는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

parallelOptions 인수의 CancellationToken이 취소된 경우

source 인수가 null인 경우

또는

parallelOptions 인수가 null인 경우

또는

body 인수가 null인 경우

parallelOptionsCancellationTokenSource과 연결된 CancellationToken가 삭제되었습니다.

source에서 정렬할 수 있는 파티셔너의 SupportsDynamicPartitions 속성은 false를 반환합니다.

또는

source에서 정렬할 수 있는 파티셔너의 KeysNormalized 속성은 false를 반환합니다.

또는

source 정렬할 수 있는 파티셔너에 있는 모든 메서드가 null을 반환할 때 throw되는 예외입니다.

지정된 대리자 중 하나에서 throw된 예외가 포함되도록 throw되는 예외입니다.

설명

이 오버로드는 기본 분할 체계를 재정의하려는 시나리오에 대해 제공됩니다. 예를 들어 작은 루프 본문은 범위를 분할하면 도움이 될 수 있습니다. 메서드는 Parallel.ForEach 사용자 지정 파티셔너가 동적 분할을 지원할 것으로 예상합니다. 자세한 내용은 PLINQ 및 TPL용 사용자 지정 파티셔너 및방법: 동적 파티션 구현을 참조하세요.

추가 정보

적용 대상

ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 Partitioner에 대해 실행합니다.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::Partitioner<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Action<TSource> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Concurrent.Partitioner<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Action<TSource> body);
static member ForEach : System.Collections.Concurrent.Partitioner<'Source> * System.Threading.Tasks.ParallelOptions * Action<'Source> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As Partitioner(Of TSource), parallelOptions As ParallelOptions, body As Action(Of TSource)) As ParallelLoopResult

형식 매개 변수

TSource

source의 요소 형식입니다.

매개 변수

source
Partitioner<TSource>

원래 데이터 소스가 포함된 Partitioner입니다.

parallelOptions
ParallelOptions

이 작업의 동작을 구성하는 개체입니다.

body
Action<TSource>

반복당 한 번씩 호출되는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

parallelOptions 인수의 CancellationToken이 취소된 경우

parallelOptionsCancellationTokenSource과 연결된 CancellationToken가 삭제되었습니다.

source 인수가 null인 경우

또는

parallelOptions 인수가 null인 경우

또는

body 인수가 null인 경우

source Partitioner의 SupportsDynamicPartitions 속성은 false를 반환합니다.

또는

source 파티셔너에 있는 모든 메서드가 null을 반환할 때 throw되는 예외입니다.

지정된 대리자 중 하나에서 throw된 예외가 포함되도록 throw되는 예외입니다.

설명

이 오버로드는 기본 분할 체계를 재정의하려는 시나리오에 대해 제공됩니다. 예를 들어 작은 루프 본문은 범위를 분할하면 도움이 될 수 있습니다. 메서드는 Parallel.ForEach 사용자 지정 파티셔너가 동적 분할을 지원할 것으로 예상합니다. 자세한 내용은 PLINQ 및 TPL용 사용자 지정 파티셔너 및방법: 동적 파티션 구현을 참조하세요.

추가 정보

적용 대상

ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

64비트 인덱스를 사용하여 반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Action<TSource, System::Threading::Tasks::ParallelLoopState ^, long> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Generic.IEnumerable<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Action<TSource,System.Threading.Tasks.ParallelLoopState,long> body);
static member ForEach : seq<'Source> * System.Threading.Tasks.ParallelOptions * Action<'Source, System.Threading.Tasks.ParallelLoopState, int64> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As IEnumerable(Of TSource), parallelOptions As ParallelOptions, body As Action(Of TSource, ParallelLoopState, Long)) As ParallelLoopResult

형식 매개 변수

TSource

소스의 데이터 형식입니다.

매개 변수

source
IEnumerable<TSource>

열거 가능한 데이터 소스입니다.

parallelOptions
ParallelOptions

이 작업의 동작을 구성하는 개체입니다.

body
Action<TSource,ParallelLoopState,Int64>

반복당 한 번씩 호출되는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

parallelOptions 인수의 CancellationToken이 취소된 경우

source 인수가 null인 경우

또는

parallelOptions 인수가 null인 경우

또는

body 인수가 null인 경우

모든 개별 예외를 포함하는 예외는 스레드에서 throw됩니다.

parallelOptionsCancellationTokenSource과 연결된 CancellationToken가 삭제되었습니다.

설명

body 대리자는 열거 가능 요소의 각 요소에 source 대해 한 번 호출됩니다. 현재 요소, ParallelLoopState 루프를 조기에 중단하는 데 사용할 수 있는 instance 및 현재 요소의 인덱스(Int64)와 같은 매개 변수가 제공됩니다.

추가 정보

적용 대상

ForEach<TSource>(Partitioner<TSource>, Action<TSource,ParallelLoopState>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

반복을 병렬로 실행할 수 있고 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 Partitioner에 대해 실행합니다.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::Partitioner<TSource> ^ source, Action<TSource, System::Threading::Tasks::ParallelLoopState ^> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Concurrent.Partitioner<TSource> source, Action<TSource,System.Threading.Tasks.ParallelLoopState> body);
static member ForEach : System.Collections.Concurrent.Partitioner<'Source> * Action<'Source, System.Threading.Tasks.ParallelLoopState> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As Partitioner(Of TSource), body As Action(Of TSource, ParallelLoopState)) As ParallelLoopResult

형식 매개 변수

TSource

source의 요소 형식입니다.

매개 변수

source
Partitioner<TSource>

원래 데이터 소스가 포함된 Partitioner입니다.

body
Action<TSource,ParallelLoopState>

반복당 한 번씩 호출되는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

source 인수가 null인 경우

또는

body 인수가 null인 경우

source Partitioner의 SupportsDynamicPartitions 속성은 false를 반환합니다.

또는

source Partitioner의 메서드는 null를 반환합니다.

또는

source Partitioner의 GetPartitions(Int32) 메서드가 올바른 파티션 수를 반환하지 않습니다.

지정된 대리자 중 하나에서 throw된 예외가 포함되도록 throw되는 예외입니다.

설명

이 오버로드는 기본 분할 체계를 재정의하려는 시나리오에 대해 제공됩니다. 예를 들어 작은 루프 본문은 범위를 분할하면 도움이 될 수 있습니다. 메서드는 Parallel.ForEach 사용자 지정 파티셔너가 동적 분할을 지원할 것으로 예상합니다. 자세한 내용은 PLINQ 및 TPL용 사용자 지정 파티셔너 및방법: 동적 파티션 구현을 참조하세요.

추가 정보

적용 대상

ForEach<TSource>(Partitioner<TSource>, Action<TSource>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

반복이 병렬로 실행될 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 Partitioner 작업을 실행합니다.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::Partitioner<TSource> ^ source, Action<TSource> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Concurrent.Partitioner<TSource> source, Action<TSource> body);
static member ForEach : System.Collections.Concurrent.Partitioner<'Source> * Action<'Source> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As Partitioner(Of TSource), body As Action(Of TSource)) As ParallelLoopResult

형식 매개 변수

TSource

source의 요소 형식입니다.

매개 변수

source
Partitioner<TSource>

원래 데이터 소스가 포함된 Partitioner입니다.

body
Action<TSource>

반복당 한 번씩 호출되는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

source 인수가 null인 경우

또는

body 인수가 null인 경우

source Partitioner의 SupportsDynamicPartitions 속성은 false를 반환합니다.

또는

source 파티셔너에 있는 모든 메서드가 null을 반환할 때 throw되는 예외입니다.

또는

source Partitioner의 GetPartitions(Int32) 메서드가 올바른 파티션 수를 반환하지 않습니다.

지정된 대리자 중 하나에서 throw된 예외가 포함되도록 throw되는 예외입니다.

예제

다음 예제에서는 와 함께 Parallel.ForEach사용하기 위해 범위 파티셔너를 구현하는 방법을 보여줍니다.

using System;
using System.Collections.Concurrent;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;

class RangePartitionerDemo 
{
        static void Main()
        {
            Stopwatch sw = null;

            long sum = 0;
            long SUMTOP = 10000000;

            // Try sequential for
            sw = Stopwatch.StartNew();
            for (long i = 0; i < SUMTOP; i++) sum += i;
            sw.Stop();
            Console.WriteLine("sequential for result = {0}, time = {1} ms", sum, sw.ElapsedMilliseconds);

            // Try parallel for -- this is slow!
            //sum = 0;
            //sw = Stopwatch.StartNew();
            //Parallel.For(0L, SUMTOP, (item) => Interlocked.Add(ref sum, item));
            //sw.Stop();
            //Console.WriteLine("parallel for  result = {0}, time = {1} ms", sum, sw.ElapsedMilliseconds);

            // Try parallel for with locals
            sum = 0;
            sw = Stopwatch.StartNew();
            Parallel.For(0L, SUMTOP, () => 0L, (item, state, prevLocal) => prevLocal + item, local => Interlocked.Add(ref sum, local));
            sw.Stop();
            Console.WriteLine("parallel for w/locals result = {0}, time = {1} ms", sum, sw.ElapsedMilliseconds);

            // Try range partitioner
            sum = 0;
            sw = Stopwatch.StartNew();
            Parallel.ForEach(Partitioner.Create(0L, SUMTOP), (range) =>
            {
                long local = 0;
                for (long i = range.Item1; i < range.Item2; i++) local += i;
                Interlocked.Add(ref sum, local);
            });
            sw.Stop();
            Console.WriteLine("range partitioner result = {0}, time = {1} ms", sum, sw.ElapsedMilliseconds);
        }
}
Imports System.Collections.Concurrent
Imports System.Threading
Imports System.Threading.Tasks

Module RangePartitionerDemo

    Sub Main()
        Dim sw As Stopwatch = Nothing

        Dim sum As Long = 0
        Dim SUMTOP As Long = 10000000

        ' Try sequential for
        sw = Stopwatch.StartNew()
        For i As Long = 0 To SUMTOP - 1
            sum += i
        Next
        sw.Stop()
        Console.WriteLine("sequential for result = {0}, time = {1} ms", sum, sw.ElapsedMilliseconds)

        ' Try parallel for with locals
        sum = 0
        sw = Stopwatch.StartNew()
        Parallel.For(0L, SUMTOP, Function() 0L, Function(item, state, prevLocal) prevLocal + item, Function(local) Interlocked.Add(sum, local))
        sw.Stop()
        Console.WriteLine("parallel for w/locals result = {0}, time = {1} ms", sum, sw.ElapsedMilliseconds)

        ' Try range partitioner
        sum = 0
        sw = Stopwatch.StartNew()
        Parallel.ForEach(Partitioner.Create(0L, SUMTOP),
                         Sub(range)
                             Dim local As Long = 0
                             For i As Long = range.Item1 To range.Item2 - 1
                                 local += i
                             Next
                             Interlocked.Add(sum, local)
                         End Sub)
        sw.Stop()
        Console.WriteLine("range partitioner result = {0}, time = {1} ms", sum, sw.ElapsedMilliseconds)
    End Sub

End Module

설명

이 오버로드는 기본 분할 체계를 재정의하려는 시나리오에 대해 제공됩니다. 예를 들어 작은 루프 본문은 범위를 분할하면 도움이 될 수 있습니다. 메서드는 Parallel.ForEach 사용자 지정 파티셔너가 동적 분할을 지원할 것으로 예상합니다. 자세한 내용은 PLINQ 및 TPL용 사용자 지정 파티셔너 및방법: 동적 파티션 구현을 참조하세요.

추가 정보

적용 대상

ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState,Int64>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

64비트 인덱스를 사용하여 반복을 병렬로 실행할 수 있고 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, Action<TSource, System::Threading::Tasks::ParallelLoopState ^, long> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Generic.IEnumerable<TSource> source, Action<TSource,System.Threading.Tasks.ParallelLoopState,long> body);
static member ForEach : seq<'Source> * Action<'Source, System.Threading.Tasks.ParallelLoopState, int64> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As IEnumerable(Of TSource), body As Action(Of TSource, ParallelLoopState, Long)) As ParallelLoopResult

형식 매개 변수

TSource

소스의 데이터 형식입니다.

매개 변수

source
IEnumerable<TSource>

열거 가능한 데이터 소스입니다.

body
Action<TSource,ParallelLoopState,Int64>

반복당 한 번씩 호출되는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

source 인수가 null인 경우

또는

body 인수가 null인 경우

모든 개별 예외를 포함하는 예외는 스레드에서 throw됩니다.

설명

body 대리자는 열거 가능 요소의 각 요소에 source 대해 한 번 호출됩니다. 현재 요소, ParallelLoopState 루프를 조기에 중단하는 데 사용할 수 있는 instance 및 현재 요소의 인덱스(Int64)와 같은 매개 변수가 제공됩니다.

추가 정보

적용 대상

ForEach<TSource>(OrderablePartitioner<TSource>, Action<TSource,ParallelLoopState,Int64>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

반복을 병렬로 실행할 수 있고 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 OrderablePartitioner<TSource>에 대해 실행합니다.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::OrderablePartitioner<TSource> ^ source, Action<TSource, System::Threading::Tasks::ParallelLoopState ^, long> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Concurrent.OrderablePartitioner<TSource> source, Action<TSource,System.Threading.Tasks.ParallelLoopState,long> body);
static member ForEach : System.Collections.Concurrent.OrderablePartitioner<'Source> * Action<'Source, System.Threading.Tasks.ParallelLoopState, int64> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As OrderablePartitioner(Of TSource), body As Action(Of TSource, ParallelLoopState, Long)) As ParallelLoopResult

형식 매개 변수

TSource

source의 요소 형식입니다.

매개 변수

source
OrderablePartitioner<TSource>

원래 데이터 소스가 포함된 정렬할 수 있는 파티셔너입니다.

body
Action<TSource,ParallelLoopState,Int64>

반복당 한 번씩 호출되는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

source 인수가 null인 경우

또는

body 인수가 null인 경우

source에서 정렬할 수 있는 파티셔너의 SupportsDynamicPartitions 속성은 false를 반환합니다.

또는

소스에서 정렬할 수 있는 파티셔너의 KeysNormalized 속성은 false를 반환합니다.

또는

소스 정렬 가능 파티셔너의 모든 메서드는 null을 반환합니다.

지정된 대리자 중 하나에서 throw된 예외입니다.

설명

이 오버로드는 기본 분할 체계를 재정의하려는 시나리오에 대해 제공됩니다. 예를 들어 작은 루프 본문은 범위를 분할하면 도움이 될 수 있습니다. 메서드는 Parallel.ForEach 사용자 지정 파티셔너가 동적 분할을 지원할 것으로 예상합니다. 자세한 내용은 PLINQ 및 TPL용 사용자 지정 파티셔너 및방법: 동적 파티션 구현을 참조하세요.

추가 정보

적용 대상

ForEach<TSource>(IEnumerable<TSource>, Action<TSource>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

반복이 병렬로 실행될 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable 작업을 실행합니다.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, Action<TSource> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Generic.IEnumerable<TSource> source, Action<TSource> body);
static member ForEach : seq<'Source> * Action<'Source> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As IEnumerable(Of TSource), body As Action(Of TSource)) As ParallelLoopResult

형식 매개 변수

TSource

소스의 데이터 형식입니다.

매개 변수

source
IEnumerable<TSource>

열거 가능한 데이터 소스입니다.

body
Action<TSource>

반복당 한 번씩 호출되는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

source 인수가 null인 경우

또는

body 인수가 null인 경우

모든 개별 예외를 포함하는 예외는 스레드에서 throw됩니다.

예제

다음 예제에서는 메서드를 ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) 사용하여 텍스트 파일의 모음 수와 공백이 아닌 문자 수를 계산합니다. 이 경우 메서드에서 ParallelLoopResult 반환된 값은 무시됩니다. 작업이 병렬로 실행될 수 있으므로 카운터 변수 증가가 원자성 작업이며 여러 스레드가 동시에 카운터 변수에 액세스하지 않도록 해야 합니다. 이 목적을 위해 예제에서는 문(C#)과 SyncLock 문(Visual Basic의 경우)을 사용합니다lock.

using System;
using System.IO;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      Task<String> task = ReadCharacters(@".\CallOfTheWild.txt");
      String text = task.Result;
      
      int nVowels = 0;
      int nNonWhiteSpace = 0;
      Object obj = new Object();

      ParallelLoopResult result = Parallel.ForEach(text, 
                                                   (ch) => {
                                                      Char uCh = Char.ToUpper(ch);
                                                      if ("AEIOUY".IndexOf(uCh) >= 0) {
                                                         lock (obj) {
                                                            nVowels++;
                                                         }
                                                      }
                                                      if (! Char.IsWhiteSpace(uCh)) {
                                                         lock (obj) {
                                                            nNonWhiteSpace++;
                                                         }   
                                                      }
                                                   } );
      Console.WriteLine("Total characters:      {0,10:N0}", text.Length);
      Console.WriteLine("Total vowels:          {0,10:N0}", nVowels);
      Console.WriteLine("Total non-white-space:  {0,10:N0}", nNonWhiteSpace);
   }

   private static async Task<String> ReadCharacters(String fn)
   {
      String text;
      using (StreamReader sr = new StreamReader(fn)) {
         text = await sr.ReadToEndAsync();
      }
      return text;
   }
}
// The example displays output like the following:
//       Total characters:         198,548
//       Total vowels:              58,421
//       Total non-white-space:     159,461
Imports System.IO
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim task As Task(Of String) = ReadCharacters(".\CallOfTheWild.txt")
      Dim text As String = task.Result
      
      Dim nVowels As Integer = 0
      Dim nNonWhiteSpace As Integer = 0
      Dim obj As New Object()

      Dim result As ParallelLoopResult = Parallel.ForEach(text, 
                                                          Sub(ch)
                                                             Dim uCh As Char = Char.ToUpper(ch)
                                                             If "AEIOUY".IndexOf(uCh) >= 0 Then
                                                                SyncLock obj
                                                                   nVowels += 1
                                                                End SyncLock
                                                             End If
                                                             If Not Char.IsWhiteSpace(uCh) Then
                                                                SyncLock obj
                                                                   nNonWhiteSpace += 1
                                                                End SyncLock   
                                                             End If
                                                          End Sub)
      Console.WriteLine("Total characters:      {0,10:N0}", text.Length)
      Console.WriteLine("Total vowels:          {0,10:N0}", nVowels)
      Console.WriteLine("Total non-white space:  {0,10:N0}", nNonWhiteSpace)
   End Sub
   
   Private Async Function ReadCharacters(fn As String) As Task(Of String)
      Dim text As String
      Using sr As New StreamReader(fn)
         text = Await sr.ReadToEndAsync()
      End Using
      Return text
   End Function
End Module
' The output from the example resembles the following:
'       Total characters:         198,548
'       Total vowels:              58,421
'       Total non-white space:     159,461

설명

body 대리자는 열거 가능 요소의 각 요소에 source 대해 한 번 호출됩니다. 현재 요소와 함께 매개 변수로 제공됩니다.

추가 정보

적용 대상

ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

반복을 병렬로 실행할 수 있고 루프 옵션을 구성할 수 있으며 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 Partitioner에 대해 실행합니다.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Concurrent::Partitioner<TSource> ^ source, System::Threading::Tasks::ParallelOptions ^ parallelOptions, Action<TSource, System::Threading::Tasks::ParallelLoopState ^> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Concurrent.Partitioner<TSource> source, System.Threading.Tasks.ParallelOptions parallelOptions, Action<TSource,System.Threading.Tasks.ParallelLoopState> body);
static member ForEach : System.Collections.Concurrent.Partitioner<'Source> * System.Threading.Tasks.ParallelOptions * Action<'Source, System.Threading.Tasks.ParallelLoopState> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As Partitioner(Of TSource), parallelOptions As ParallelOptions, body As Action(Of TSource, ParallelLoopState)) As ParallelLoopResult

형식 매개 변수

TSource

source의 요소 형식입니다.

매개 변수

source
Partitioner<TSource>

원래 데이터 소스가 포함된 Partitioner입니다.

parallelOptions
ParallelOptions

이 작업의 동작을 구성하는 개체입니다.

body
Action<TSource,ParallelLoopState>

반복당 한 번씩 호출되는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

parallelOptions 인수의 CancellationToken이 취소된 경우

parallelOptionsCancellationTokenSource과 연결된 CancellationToken가 삭제되었습니다.

source 인수가 null인 경우

또는

parallelOptions 인수가 null인 경우

또는

body 인수가 null인 경우

source Partitioner의 SupportsDynamicPartitions 속성은 false를 반환합니다.

또는

source 파티셔너에 있는 모든 메서드가 null을 반환할 때 throw되는 예외입니다.

지정된 대리자 중 하나에서 throw된 예외가 포함되도록 throw되는 예외입니다.

설명

이 오버로드는 기본 분할 체계를 재정의하려는 시나리오에 대해 제공됩니다. 예를 들어 작은 루프 본문은 범위를 분할하면 도움이 될 수 있습니다. 메서드는 Parallel.ForEach 사용자 지정 파티셔너가 동적 분할을 지원할 것으로 예상합니다. 자세한 내용은 PLINQ 및 TPL용 사용자 지정 파티셔너 및방법: 동적 파티션 구현을 참조하세요.

추가 정보

적용 대상

ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState>)

Source:
Parallel.cs
Source:
Parallel.cs
Source:
Parallel.cs

반복을 병렬로 실행할 수 있고 루프 상태를 모니터링 및 조작할 수 있는 foreach(Visual Basic의 경우 For Each) 작업을 IEnumerable에 대해 실행합니다.

public:
generic <typename TSource>
 static System::Threading::Tasks::ParallelLoopResult ForEach(System::Collections::Generic::IEnumerable<TSource> ^ source, Action<TSource, System::Threading::Tasks::ParallelLoopState ^> ^ body);
public static System.Threading.Tasks.ParallelLoopResult ForEach<TSource> (System.Collections.Generic.IEnumerable<TSource> source, Action<TSource,System.Threading.Tasks.ParallelLoopState> body);
static member ForEach : seq<'Source> * Action<'Source, System.Threading.Tasks.ParallelLoopState> -> System.Threading.Tasks.ParallelLoopResult
Public Shared Function ForEach(Of TSource) (source As IEnumerable(Of TSource), body As Action(Of TSource, ParallelLoopState)) As ParallelLoopResult

형식 매개 변수

TSource

소스의 데이터 형식입니다.

매개 변수

source
IEnumerable<TSource>

열거 가능한 데이터 소스입니다.

body
Action<TSource,ParallelLoopState>

반복당 한 번씩 호출되는 대리자입니다.

반환

완료된 루프 부분에 대한 정보가 포함된 구조체입니다.

예외

source 인수가 null인 경우

또는

body 인수가 null인 경우

모든 개별 예외를 포함하는 예외는 스레드에서 throw됩니다.

설명

body 대리자는 열거 가능의 각 요소에 source 대해 한 번 호출됩니다. 현재 요소 및 ParallelLoopState 루프를 조기에 중단하는 데 사용할 수 있는 instance 매개 변수와 함께 제공됩니다.

추가 정보

적용 대상