Parallel.ForEach Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wykonuje operację foreach
(For Each
w języku Visual Basic), w której iteracji mogą być uruchamiane równolegle.
Przeciążenia
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Wykonuje operację |
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Wykonuje operację |
ForEach<TSource,TLocal>(Partitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Wykonuje operację |
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Wykonuje operację |
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Wykonuje operację |
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Wykonuje operację |
ForEach<TSource,TLocal>(Partitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Wykonuje operację |
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Wykonuje operację |
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource>) |
Wykonuje operację |
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>) |
Wykonuje operację |
ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>) |
Wykonuje operację |
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource>) |
Wykonuje operację |
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>) |
Wykonuje operację |
ForEach<TSource>(Partitioner<TSource>, Action<TSource,ParallelLoopState>) |
Wykonuje operację |
ForEach<TSource>(Partitioner<TSource>, Action<TSource>) |
Wykonuje operację |
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState,Int64>) |
Wykonuje operację |
ForEach<TSource>(OrderablePartitioner<TSource>, Action<TSource,ParallelLoopState,Int64>) |
Wykonuje operację |
ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) |
Wykonuje operację |
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>) |
Wykonuje operację |
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState>) |
Wykonuje operację |
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) z danymi lokalnymi wątku na danych IEnumerable , w których iteracje mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.
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
Parametry typu
- TSource
Typ danych w źródle.
- TLocal
Typ danych lokalnych wątku.
Parametry
- source
- IEnumerable<TSource>
Wyliczalne źródło danych.
- parallelOptions
- ParallelOptions
Obiekt, który konfiguruje zachowanie tej operacji.
- localInit
- Func<TLocal>
Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Delegat wywoływany raz na iterację.
- localFinally
- Action<TLocal>
Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.
Zwraca
Struktura zawierająca informacje o tym, która część pętli została ukończona.
Wyjątki
Argumentem source
jest null
.
-lub-
Argumentem parallelOptions
jest null
.
-lub-
Argumentem body
jest null
.
-lub-
Argumentem localInit
jest null
.
-lub-
Argumentem localFinally
jest null
.
Argument CancellationToken w argumencie parallelOptions
jest anulowany.
Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions
został usunięty.
Wyjątek, który zawiera wszystkie poszczególne wyjątki zgłoszone we wszystkich wątkach.
Uwagi
Delegat body
jest wywoływany raz dla każdego elementu w source
wyliczaniu. Jest on dostarczany z następującymi parametrami: bieżącym elementem, wystąpieniem ParallelLoopState , które może zostać użyte do przedwczesnego przerwania pętli, oraz niektóre stany lokalne, które mogą być współużytkowane przez iterację wykonywaną w tym samym wątku.
Delegat localInit
jest wywoływany raz dla każdego zadania, które uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te stany początkowe są przekazywane do pierwszych body
wywołań w każdym zadaniu. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnia wywołanie treści każdego zadania zwraca wartość stanu przekazywaną do delegata localFinally
. Delegat localFinally
jest wywoływany raz na wątek, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.
Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków, które służą do obsługi pętli.
Zobacz też
Dotyczy
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) z danymi lokalnymi wątkowymi i indeksami 64-bitowymi na iteracji IEnumerable , w których iteracji mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować nimi.
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
Parametry typu
- TSource
Typ danych w źródle.
- TLocal
Typ danych lokalnych wątku.
Parametry
- source
- IEnumerable<TSource>
Wyliczalne źródło danych.
- parallelOptions
- ParallelOptions
Obiekt, który konfiguruje zachowanie tej operacji.
- localInit
- Func<TLocal>
Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Delegat wywoływany raz na iterację.
- localFinally
- Action<TLocal>
Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.
Zwraca
Struktura zawierająca informacje o tym, która część pętli została ukończona.
Wyjątki
Argumentem source
jest null
.
-lub-
Argumentem parallelOptions
jest null
.
-lub-
Argumentem body
jest null
.
-lub-
Argumentem localInit
jest null
.
-lub-
Argumentem localFinally
jest null
.
Argument CancellationToken w argumencie parallelOptions
jest anulowany.
Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions
został usunięty.
Wyjątek, który zawiera wszystkie poszczególne wyjątki zgłoszone we wszystkich wątkach.
Uwagi
Delegat body
jest wywoływany raz dla każdego elementu w source
wyliczaniu. Jest on dostarczany z następującymi parametrami: bieżącym elementem, wystąpieniem ParallelLoopState , które może służyć do przedwczesnego rozbicia pętli, indeksu bieżącego elementu (Int64) i stanu lokalnego, które mogą być współużytkowane przez iterację wykonywaną w tym samym wątku.
Delegat localInit
jest wywoływany raz dla każdego zadania, które uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te stany początkowe są przekazywane do pierwszych body
wywołań w każdym zadaniu. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnia wywołanie treści każdego zadania zwraca wartość stanu przekazywaną do delegata localFinally
. Delegat localFinally
jest wywoływany raz na wątek, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.
Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków, które służą do obsługi pętli.
Zobacz też
Dotyczy
ForEach<TSource,TLocal>(Partitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) z danymi lokalnymi wątku na obiekcie Partitioner , w którym iteracje mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.
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
Parametry typu
- TSource
Typ elementów w pliku source
.
- TLocal
Typ danych lokalnych wątku.
Parametry
- source
- Partitioner<TSource>
Partycjonator zawierający oryginalne źródło danych.
- parallelOptions
- ParallelOptions
Obiekt, który konfiguruje zachowanie tej operacji.
- localInit
- Func<TLocal>
Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Delegat wywoływany raz na iterację.
- localFinally
- Action<TLocal>
Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.
Zwraca
Struktura zawierająca informacje o tym, która część pętli została ukończona.
Wyjątki
Argumentem source
jest null
.
-lub-
Argumentem parallelOptions
jest null
.
-lub-
Argumentem body
jest null
.
-lub-
Argumentem localInit
jest null
.
-lub-
Argumentem localFinally
jest null
.
Właściwość SupportsDynamicPartitions w zwracaniu source
Partitionerfalse
lub partycjonator zwraca null
partycje.
Wyjątek, który zawiera wszystkie poszczególne wyjątki zgłoszone we wszystkich wątkach.
Argument CancellationToken w argumencie parallelOptions
jest anulowany.
Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions
został usunięty.
Uwagi
To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład jednostki małej pętli mogą korzystać z partycjonowania zakresu. Metoda ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. To przeciążenie jest zapewniane w scenariuszach z małymi ciałami pętli, które mogą korzystać z partycjonowania zakresu statycznego. Partycjonatory muszą obsługiwać partycje dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla PLINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).
Delegat localInit
jest wywoływany raz dla każdego zadania, które uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te stany początkowe są przekazywane do pierwszych body
wywołań w każdym zadaniu. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnia wywołanie treści każdego zadania zwraca wartość stanu przekazywaną do delegata localFinally
. Delegat localFinally
jest wywoływany raz na zadanie, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.
Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków, które służą do obsługi pętli.
Zobacz też
Dotyczy
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) z indeksami 64-bitowymi oraz z danymi lokalnymi wątku na platformie OrderablePartitioner<TSource> , w której iteracje mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować nimi.
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
Parametry typu
- TSource
Typ elementów w pliku source
.
- TLocal
Typ danych lokalnych wątku.
Parametry
Kolejność partycjonatora, który zawiera oryginalne źródło danych.
- parallelOptions
- ParallelOptions
Obiekt, który konfiguruje zachowanie tej operacji.
- localInit
- Func<TLocal>
Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Delegat wywoływany raz na iterację.
- localFinally
- Action<TLocal>
Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.
Zwraca
Struktura zawierająca informacje o tym, która część pętli została ukończona.
Wyjątki
Argumentem source
jest null
.
-lub-
Argumentem parallelOptions
jest null
.
-lub-
Argumentem body
jest null
.
-lub-
Argument localInit
lub localFinally
to null
.
Właściwość SupportsDynamicPartitions w zwracaniu source
Partitionerfalse
lub partycjonator zwraca null
partycje.
Wyjątek, który zawiera wszystkie poszczególne wyjątki zgłoszone we wszystkich wątkach.
Argument CancellationToken w argumencie parallelOptions
jest anulowany.
Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions
został usunięty.
Uwagi
To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład jednostki małej pętli mogą korzystać z partycjonowania zakresu. Metoda ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla PLINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).
Delegat localInit
jest wywoływany raz dla każdego zadania, które uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te stany początkowe są przekazywane do pierwszych body
wywołań w każdym zadaniu. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnia wywołanie treści w każdym wątku zwraca wartość stanu przekazywaną do delegata localFinally
. Delegat localFinally
jest wywoływany raz na zadanie, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.
Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków, które służą do obsługi pętli.
Zobacz też
Dotyczy
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) z danymi lokalnymi wątku na danych IEnumerable , w których iteracje mogą być uruchamiane równolegle, a stan pętli można monitorować i manipulować nimi.
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
Parametry typu
- TSource
Typ danych w źródle.
- TLocal
Typ danych lokalnych wątku.
Parametry
- source
- IEnumerable<TSource>
Wyliczalne źródło danych.
- localInit
- Func<TLocal>
Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Delegat wywoływany raz na iterację.
- localFinally
- Action<TLocal>
Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.
Zwraca
Struktura zawierająca informacje o tym, która część pętli została ukończona.
Wyjątki
Argumentem source
jest null
.
-lub-
Argumentem body
jest null
.
-lub-
Argumentem localInit
jest null
.
-lub-
Argumentem localFinally
jest null
.
Wyjątek, który zawiera wszystkie poszczególne wyjątki zgłoszone we wszystkich wątkach.
Przykłady
W poniższym przykładzie pokazano, jak używać metody ze stanem ForEach lokalnym:
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
Uwagi
Delegat body
jest wywoływany raz dla każdego elementu w source
wyliczaniu. Jest on dostarczany z następującymi parametrami: bieżącym elementem, wystąpieniem ParallelLoopState , które może zostać użyte do przedwczesnego przerwania pętli, oraz niektóre stany lokalne, które mogą być współużytkowane przez iterację wykonywaną w tym samym wątku.
Delegat localInit
jest wywoływany raz dla każdego zadania, które uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te stany początkowe są przekazywane do pierwszych body
wywołań w każdym zadaniu. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnia wywołanie treści każdego zadania zwraca wartość stanu przekazywaną do delegata localFinally
. Delegat localFinally
jest wywoływany raz na wątek, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.
Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków, które służą do obsługi pętli.
Zobacz też
Dotyczy
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) z danymi lokalnymi wątku na danych IEnumerable , w których iteracje mogą być uruchamiane równolegle, a stan pętli można monitorować i manipulować nimi.
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
Parametry typu
- TSource
Typ danych w źródle.
- TLocal
Typ danych lokalnych wątku.
Parametry
- source
- IEnumerable<TSource>
Wyliczalne źródło danych.
- localInit
- Func<TLocal>
Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Delegat wywoływany raz na iterację.
- localFinally
- Action<TLocal>
Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.
Zwraca
Struktura zawierająca informacje o tym, która część pętli została ukończona.
Wyjątki
Argumentem source
jest null
.
-lub-
Argumentem body
jest null
.
-lub-
Argumentem localInit
jest null
.
-lub-
Argumentem localFinally
jest null
.
Wyjątek, który zawiera wszystkie poszczególne wyjątki zgłoszone we wszystkich wątkach.
Uwagi
Delegat body
jest wywoływany raz dla każdego elementu w source
wyliczaniu. Jest on dostarczany z następującymi parametrami: bieżącym elementem, wystąpieniem ParallelLoopState , które może służyć do przedwczesnego rozbicia pętli, indeksu bieżącego elementu (Int64) i stanu lokalnego, które mogą być współużytkowane przez iterację wykonywaną w tym samym wątku.
Delegat localInit
jest wywoływany raz dla każdego zadania, które uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te stany początkowe są przekazywane do pierwszych body
wywołań w każdym zadaniu. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnia wywołanie treści każdego zadania zwraca wartość stanu przekazywaną do delegata localFinally
. Delegat localFinally
jest wywoływany raz na zadanie, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.
Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków, które służą do obsługi pętli.
Zobacz też
Dotyczy
ForEach<TSource,TLocal>(Partitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) z danymi lokalnymi wątku na obiekcie Partitioner , w którym iteracje mogą być uruchamiane równolegle, a stan pętli można monitorować i manipulować nimi.
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
Parametry typu
- TSource
Typ elementów w pliku source
.
- TLocal
Typ danych lokalnych wątku.
Parametry
- source
- Partitioner<TSource>
Partycjonator zawierający oryginalne źródło danych.
- localInit
- Func<TLocal>
Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Delegat wywoływany raz na iterację.
- localFinally
- Action<TLocal>
Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.
Zwraca
Struktura zawierająca informacje o tym, która część pętli została ukończona.
Wyjątki
Argumentem source
jest null
.
-lub-
Argumentem body
jest null
.
-lub-
Argumentem localInit
jest null
.
-lub-
Argumentem localFinally
jest null
.
Właściwość SupportsDynamicPartitions w zwracaniu source
Partitionerfalse
lub partycjonator zwraca null
partycje.
Wyjątek, który zawiera wszystkie poszczególne wyjątki zgłoszone we wszystkich wątkach.
Uwagi
To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład jednostki małej pętli mogą korzystać z partycjonowania zakresu. Metoda ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla PLINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).
Delegat localInit
jest wywoływany raz dla każdego wątku, który uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te stany początkowe są przekazywane do pierwszych body
wywołań w każdym zadaniu. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnia wywołanie treści każdego zadania zwraca wartość stanu przekazywaną do delegata localFinally
. Delegat localFinally
jest wywoływany raz na zadanie, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.
Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków, które służą do obsługi pętli.
Zobacz też
Dotyczy
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) z danymi lokalnymi wątku na obiekcie OrderablePartitioner<TSource> , w którym iteracje mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.
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
Parametry typu
- TSource
Typ elementów w pliku source
.
- TLocal
Typ danych lokalnych wątku.
Parametry
Kolejność partycjonatora, który zawiera oryginalne źródło danych.
- localInit
- Func<TLocal>
Delegat funkcji, który zwraca początkowy stan danych lokalnych dla każdego zadania.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Delegat wywoływany raz na iterację.
- localFinally
- Action<TLocal>
Delegat wykonujący ostateczną akcję w stanie lokalnym każdego zadania.
Zwraca
Struktura zawierająca informacje o tym, która część pętli została ukończona.
Wyjątki
Argumentem source
jest null
.
-lub-
Argumentem body
jest null
.
-lub-
Argumentem localInit
jest null
.
-lub-
Argumentem localFinally
jest null
.
Właściwość SupportsDynamicPartitions w zwracaniu source
Partitionerfalse
lub partycjonator zwraca null
partycje.
Wyjątek, który zawiera wszystkie poszczególne wyjątki zgłoszone we wszystkich wątkach.
Uwagi
To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład jednostki małej pętli mogą korzystać z partycjonowania zakresu. Metoda ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla PLINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).
Delegat localInit
jest wywoływany raz dla każdego zadania, które uczestniczy w wykonaniu pętli i zwraca początkowy stan lokalny dla każdego z tych zadań. Te stany początkowe są przekazywane do pierwszych body
wywołań w każdym zadaniu. Następnie każda kolejna wywołanie treści zwraca ewentualnie zmodyfikowaną wartość stanu przekazywaną do następnej wywołania treści. Na koniec ostatnia wywołanie treści każdego zadania zwraca wartość stanu przekazywaną do delegata localFinally
. Delegat localFinally
jest wywoływany raz na zadanie, aby wykonać ostateczną akcję w stanie lokalnym każdego zadania. Ten delegat może być wywoływany współbieżnie w wielu zadaniach; w związku z tym należy zsynchronizować dostęp do wszystkich zmiennych udostępnionych.
Metoda Parallel.ForEach może używać więcej zadań niż wątki w okresie istnienia wykonywania, ponieważ istniejące zadania są wykonywane i zastępowane przez nowe zadania. Daje to obiektowi bazowemu TaskScheduler szansę dodawania, zmieniania lub usuwania wątków, które służą do obsługi pętli.
Zobacz też
Dotyczy
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) na iteracji IEnumerable , w której można uruchamiać równolegle, a opcje pętli można skonfigurować.
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
Parametry typu
- TSource
Typ danych w źródle.
Parametry
- source
- IEnumerable<TSource>
Wyliczalne źródło danych.
- parallelOptions
- ParallelOptions
Obiekt, który konfiguruje zachowanie tej operacji.
- body
- Action<TSource>
Delegat wywoływany raz na iterację.
Zwraca
Struktura zawierająca informacje o tym, która część pętli została ukończona.
Wyjątki
Argument CancellationToken w argumencie parallelOptions
jest anulowany
Argumentem source
jest null
.
-lub-
Argumentem parallelOptions
jest null
.
-lub-
Argumentem body
jest null
.
Wyjątek, który zawiera wszystkie poszczególne wyjątki zgłoszone we wszystkich wątkach.
Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions
został usunięty.
Uwagi
Delegat body
jest wywoływany raz dla każdego elementu w source
wyliczaniu. Jest on dostarczany z bieżącym elementem jako parametrem.
Zobacz też
Dotyczy
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic), na IEnumerable której iteracje mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.
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
Parametry typu
- TSource
Typ danych w źródle.
Parametry
- source
- IEnumerable<TSource>
Wyliczalne źródło danych.
- parallelOptions
- ParallelOptions
Obiekt, który konfiguruje zachowanie tej operacji.
- body
- Action<TSource,ParallelLoopState>
Delegat wywoływany raz na iterację.
Zwraca
Struktura zawierająca informacje o tym, która część pętli została ukończona.
Wyjątki
Argument CancellationToken w argumencie parallelOptions
jest anulowany
Argumentem source
jest null
.
-lub-
Argumentem parallelOptions
jest null
.
-lub-
Argumentem body
jest null
.
Wyjątek, który zawiera wszystkie poszczególne wyjątki zgłoszone we wszystkich wątkach.
Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions
został usunięty.
Uwagi
Delegat body
jest wywoływany raz dla każdego elementu w source
wyliczaniu. Jest on dostarczany z następującymi parametrami: bieżącym elementem i wystąpieniem ParallelLoopState , które może zostać użyte do przedwczesnego przerwania pętli.
Zobacz też
Dotyczy
ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic), na OrderablePartitioner<TSource> której iteracje mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować.
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
Parametry typu
- TSource
Typ elementów w pliku source
.
Parametry
Kolejność partycjonatora, który zawiera oryginalne źródło danych.
- parallelOptions
- ParallelOptions
Obiekt, który konfiguruje zachowanie tej operacji.
- body
- Action<TSource,ParallelLoopState,Int64>
Delegat wywoływany raz na iterację.
Zwraca
Struktura zawierająca informacje o tym, która część pętli została ukończona.
Wyjątki
Argument CancellationToken w argumencie parallelOptions
jest anulowany
Argumentem source
jest null
.
-lub-
Argumentem parallelOptions
jest null
.
-lub-
Argumentem body
jest null
.
Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions
został usunięty.
Właściwość SupportsDynamicPartitions w uporządkowanym partycjonatorze source
zwraca wartość false
.
-lub-
Właściwość KeysNormalized w uporządkowanym partycjonatorze source
zwraca wartość false
.
-lub-
Wyjątek zgłaszany, gdy wszystkie metody w uporządkowanym partycjonatorze source
zwracają wartość null
.
Zgłoszony wyjątek zawiera wyjątek zgłoszony przez jednego z określonych pełnomocników.
Uwagi
To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład jednostki małej pętli mogą korzystać z partycjonowania zakresu. Metoda Parallel.ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla PLINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).
Zobacz też
Dotyczy
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) na Partitioner iteracji, w której można uruchamiać równolegle, a opcje pętli można skonfigurować.
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
Parametry typu
- TSource
Typ elementów w pliku source
.
Parametry
- source
- Partitioner<TSource>
Partycjonator zawierający oryginalne źródło danych.
- parallelOptions
- ParallelOptions
Obiekt, który konfiguruje zachowanie tej operacji.
- body
- Action<TSource>
Delegat wywoływany raz na iterację.
Zwraca
Struktura zawierająca informacje o tym, która część pętli została ukończona.
Wyjątki
Argument CancellationToken w argumencie parallelOptions
jest anulowany.
Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions
został usunięty.
Argumentem source
jest null
.
-lub-
Argumentem parallelOptions
jest null
.
-lub-
Argumentem body
jest null
.
Właściwość SupportsDynamicPartitions w partycjonatorze source
zwraca wartość false
.
-lub-
Wyjątek zgłaszany, gdy wszystkie metody w partycjonatorze source
zwracają wartość null
.
Zgłoszony wyjątek zawiera wyjątek zgłoszony przez jednego z określonych pełnomocników.
Uwagi
To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład jednostki małej pętli mogą korzystać z partycjonowania zakresu. Metoda Parallel.ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL (Niestandardowe partycjonatory dla PLINQ i TPL ) oraz How to: Implement Dynamic Partitions (Instrukcje: implementowanie partycji dynamicznych).
Zobacz też
Dotyczy
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) z 64-bitowymi indeksami na IEnumerable iteracji, w których iteracje mogą być uruchamiane równolegle, można skonfigurować opcje pętli, a stan pętli można monitorować i manipulować nimi.
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
Parametry typu
- TSource
Typ danych w źródle.
Parametry
- source
- IEnumerable<TSource>
Wyliczalne źródło danych.
- parallelOptions
- ParallelOptions
Obiekt, który konfiguruje zachowanie tej operacji.
- body
- Action<TSource,ParallelLoopState,Int64>
Delegat wywoływany raz na iterację.
Zwraca
Struktura zawierająca informacje o tym, która część pętli została ukończona.
Wyjątki
Argument CancellationToken w argumencie parallelOptions
jest anulowany
Argumentem source
jest null
.
-lub-
Argumentem parallelOptions
jest null
.
-lub-
Argumentem body
jest null
.
Wyjątek, który zawiera wszystkie poszczególne wyjątki zgłoszone we wszystkich wątkach.
Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions
został usunięty.
Uwagi
Delegat body
jest wywoływany raz dla każdego elementu w source
wyliczaniu. Jest on dostarczany z następującymi parametrami: bieżącym elementem, wystąpieniem ParallelLoopState , które może służyć do przedwczesnego rozbicia pętli i indeksu bieżącego elementu (Int64).
Zobacz też
Dotyczy
ForEach<TSource>(Partitioner<TSource>, Action<TSource,ParallelLoopState>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) na Partitioner iteracji, w której może działać równolegle, a stan pętli można monitorować i manipulować nimi.
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
Parametry typu
- TSource
Typ elementów w elemecie source
.
Parametry
- source
- Partitioner<TSource>
Partycjonator zawierający oryginalne źródło danych.
- body
- Action<TSource,ParallelLoopState>
Delegat, który jest wywoływany raz na iterację.
Zwraca
Struktura zawierająca informacje o ukończonej części pętli.
Wyjątki
Właściwość SupportsDynamicPartitions w partycjonatorze source
zwraca wartość false
.
-lub-
Metoda w partycjonatorze source
zwraca wartość null
.
-lub-
Metoda GetPartitions(Int32) w partycjonatorze source
nie zwraca poprawnej liczby partycji.
Zgłoszony wyjątek zawiera wyjątek zgłoszony przez jednego z określonych pełnomocników.
Uwagi
To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład małe jednostki pętli mogą korzystać z partycjonowania zakresu. Metoda Parallel.ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL and How to: Implement Dynamic Partitions (Niestandardowe partycjonatory dla plINQ i TPL ) oraz How to: Implement dynamic partitions (Implementowanie partycji dynamicznych).
Zobacz też
Dotyczy
ForEach<TSource>(Partitioner<TSource>, Action<TSource>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) na Partitioner iteracji, w której iteracji mogą być uruchamiane równolegle.
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
Parametry typu
- TSource
Typ elementów w elemecie source
.
Parametry
- source
- Partitioner<TSource>
Partycjonator zawierający oryginalne źródło danych.
- body
- Action<TSource>
Delegat, który jest wywoływany raz na iterację.
Zwraca
Struktura zawierająca informacje o ukończonej części pętli.
Wyjątki
Właściwość SupportsDynamicPartitions w partycjonatorze source
zwraca wartość false
.
-lub-
Wyjątek zgłaszany, gdy wszystkie metody w partycjonatorze source
zwracają null
wartość .
-lub-
Metoda GetPartitions(Int32) w partycjonatorze source
nie zwraca prawidłowej liczby partycji.
Zgłaszany wyjątek zawierający wyjątek zgłoszony przez jednego z określonych delegatów.
Przykłady
W poniższym przykładzie pokazano, jak zaimplementować partycjonator zakresu do użycia z programem 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
Uwagi
To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład małe jednostki pętli mogą korzystać z partycjonowania zakresu. Metoda Parallel.ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL and How to: Implement Dynamic Partitions (Niestandardowe partycjonatory dla plINQ i TPL ) oraz How to: Implement dynamic partitions (Implementowanie partycji dynamicznych).
Zobacz też
Dotyczy
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState,Int64>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) z indeksami 64-bitowymi, w IEnumerable których iteracji mogą działać równolegle, a stan pętli można monitorować i manipulować nimi.
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
Parametry typu
- TSource
Typ danych w źródle.
Parametry
- source
- IEnumerable<TSource>
Wyliczalne źródło danych.
- body
- Action<TSource,ParallelLoopState,Int64>
Delegat, który jest wywoływany raz na iterację.
Zwraca
Struktura zawierająca informacje o ukończonej części pętli.
Wyjątki
Wyjątek, który zawiera wszystkie poszczególne wyjątki zgłoszone we wszystkich wątkach.
Uwagi
Delegat body
jest wywoływany raz dla każdego elementu w wyliczalnym source
elemecie. Jest on dostarczany z następującymi parametrami: bieżącym elementem, wystąpieniem ParallelLoopState , które może służyć do przedwczesnego wyłamywania pętli i indeksu bieżącego elementu (Int64).
Zobacz też
Dotyczy
ForEach<TSource>(OrderablePartitioner<TSource>, Action<TSource,ParallelLoopState,Int64>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) na OrderablePartitioner<TSource> iteracji, w której może działać równolegle, a stan pętli można monitorować i manipulować nimi.
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
Parametry typu
- TSource
Typ elementów w elemecie source
.
Parametry
Uporządkowany partycjonator zawierający oryginalne źródło danych.
- body
- Action<TSource,ParallelLoopState,Int64>
Delegat, który jest wywoływany raz na iterację.
Zwraca
Struktura zawierająca informacje o ukończonej części pętli.
Wyjątki
Właściwość SupportsDynamicPartitions w uporządkowanym partycjonatorze source
zwraca wartość false
.
-lub-
Właściwość KeysNormalized w źródłowym uporządkowanym partycjonatorze zwraca false
wartość .
-lub-
Wszystkie metody w źródłowym uporządkowanym partycjonatorze zwracają null
wartość .
Wyjątek zgłoszony przez jednego z określonych delegatów.
Uwagi
To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład małe jednostki pętli mogą korzystać z partycjonowania zakresu. Metoda Parallel.ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL and How to: Implement Dynamic Partitions (Niestandardowe partycjonatory dla plINQ i TPL ) oraz How to: Implement dynamic partitions (Implementowanie partycji dynamicznych).
Zobacz też
Dotyczy
ForEach<TSource>(IEnumerable<TSource>, Action<TSource>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) na IEnumerable iteracji, w której iteracji mogą być uruchamiane równolegle.
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
Parametry typu
- TSource
Typ danych w źródle.
Parametry
- source
- IEnumerable<TSource>
Wyliczalne źródło danych.
- body
- Action<TSource>
Delegat, który jest wywoływany raz na iterację.
Zwraca
Struktura zawierająca informacje o ukończonej części pętli.
Wyjątki
Wyjątek, który zawiera wszystkie poszczególne wyjątki zgłoszone we wszystkich wątkach.
Przykłady
W poniższym przykładzie użyto ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) metody , aby zliczyć liczbę ślubów i znaków innych niż białe znaki w pliku tekstowym. W takim przypadku ParallelLoopResult wartość zwracana przez metodę jest ignorowana. Należy pamiętać, że ponieważ operacje mogą działać równolegle, należy upewnić się, że zwiększanie zmiennych licznika jest operacją niepodzielnej i że wiele wątków nie próbuje jednocześnie uzyskać dostępu do zmiennych licznika. W tym celu w przykładzie użyto instrukcji lock
(w języku C#) i instrukcji SyncLock
(w języku Visual Basic).
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
Uwagi
Delegat body
jest wywoływany raz dla każdego elementu w wyliczalnym source
elemecie. Jest on dostarczany z bieżącym elementem jako parametrem.
Zobacz też
Dotyczy
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) na Partitioner iteracji, w której iteracji mogą być uruchamiane równolegle, opcje pętli można skonfigurować, a stan pętli można monitorować i manipulować.
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
Parametry typu
- TSource
Typ elementów w elemecie source
.
Parametry
- source
- Partitioner<TSource>
Partycjonator zawierający oryginalne źródło danych.
- parallelOptions
- ParallelOptions
Obiekt, który konfiguruje zachowanie tej operacji.
- body
- Action<TSource,ParallelLoopState>
Delegat, który jest wywoływany raz na iterację.
Zwraca
Struktura zawierająca informacje o ukończonej części pętli.
Wyjątki
Argument CancellationToken w elemecie parallelOptions
jest anulowany.
Element CancellationTokenSource skojarzony z elementem CancellationToken w obiekcie parallelOptions
został usunięty.
Argumentem source
jest null
.
-lub-
Argumentem parallelOptions
jest null
.
-lub-
Argumentem body
jest null
.
Właściwość SupportsDynamicPartitions w partycjonatorze source
zwraca wartość false
.
-lub-
Wyjątek zgłaszany, gdy wszystkie metody w partycjonatorze source
zwracają null
wartość .
Zgłaszany wyjątek zawierający wyjątek zgłoszony przez jednego z określonych delegatów.
Uwagi
To przeciążenie jest udostępniane w scenariuszach, w których chcesz zastąpić domyślny schemat partycjonowania. Na przykład małe jednostki pętli mogą korzystać z partycjonowania zakresu. Metoda Parallel.ForEach oczekuje, że niestandardowe partycjonatory będą obsługiwać partycjonowanie dynamiczne. Aby uzyskać więcej informacji, zobacz Custom Partitioners for PLINQ and TPL and How to: Implement Dynamic Partitions (Niestandardowe partycjonatory dla plINQ i TPL ) oraz How to: Implement dynamic partitions (Implementowanie partycji dynamicznych).
Zobacz też
Dotyczy
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState>)
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
- Źródło:
- Parallel.cs
Wykonuje operację foreach
(For Each
w języku Visual Basic) na IEnumerable iteracji, w której mogą być uruchamiane równolegle, a stan pętli można monitorować i manipulować.
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
Parametry typu
- TSource
Typ danych w źródle.
Parametry
- source
- IEnumerable<TSource>
Wyliczalne źródło danych.
- body
- Action<TSource,ParallelLoopState>
Delegat wywoływany raz na iterację.
Zwraca
Struktura zawierająca informacje o tym, która część pętli została ukończona.
Wyjątki
Wyjątek, który zawiera wszystkie poszczególne wyjątki zgłoszone we wszystkich wątkach.
Uwagi
Delegat body
jest wywoływany raz dla każdego elementu w source
wyliczaniu. Jest on dostarczany z następującymi parametrami: bieżącym elementem i wystąpieniem ParallelLoopState , które może zostać użyte do przedwczesnego przerwania pętli.