Parallel.ForEach Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Spustí foreach
operaci (For Each
v jazyce Visual Basic), ve které mohou paralelně běžet iterace.
Přetížení
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Provede |
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
|
ForEach<TSource,TLocal>(Partitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Provede |
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Provede |
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Spustí |
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Provede |
ForEach<TSource,TLocal>(Partitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>) |
Provede |
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>) |
Provede |
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource>) |
Provede |
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>) |
Spustí |
ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>) |
Provede |
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource>) |
Provede |
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>) |
Provede |
ForEach<TSource>(Partitioner<TSource>, Action<TSource,ParallelLoopState>) |
Provede |
ForEach<TSource>(Partitioner<TSource>, Action<TSource>) |
Provede |
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState,Int64>) |
Spustí |
ForEach<TSource>(OrderablePartitioner<TSource>, Action<TSource,ParallelLoopState,Int64>) |
Provede |
ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) |
Spustí |
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>) |
Provede |
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState>) |
Spustí |
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
Provede foreach
operaci (For Each
v jazyce Visual Basic) s místními daty vlákna na objektu IEnumerable , ve kterém mohou běžet paralelně iterace, konfigurovat možnosti smyčky a stav smyčky lze monitorovat a manipulovat s ní.
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 dat ve zdroji.
- TLocal
Typ místních dat vlákna.
Parametry
- source
- IEnumerable<TSource>
Výčtový zdroj dat.
- parallelOptions
- ParallelOptions
Objekt, který konfiguruje chování této operace.
- localInit
- Func<TLocal>
Delegát funkce, který vrací počáteční stav místních dat pro každý úkol.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Delegát, který je vyvolán jednou za iteraci.
- localFinally
- Action<TLocal>
Delegát, který provede poslední akci s místním stavem každého úkolu.
Návraty
Struktura obsahující informace o tom, která část smyčky byla dokončena.
Výjimky
Argument source
je null
.
-nebo-
Argument parallelOptions
je null
.
-nebo-
Argument body
je null
.
-nebo-
Argument localInit
je null
.
-nebo-
Argument localFinally
je null
.
Argument CancellationToken v argumentu parallelOptions
je zrušen.
Přidružená CancellationTokenSource k objektu CancellationToken v souboru parallelOptions
byla odstraněna.
Výjimka, která obsahuje všechny jednotlivé výjimky vyvolané ve všech vláknech.
Poznámky
Delegát je body
vyvolán jednou pro každý prvek v source
výčet. Je k dispozici s následujícími parametry: aktuální prvek, instance, ParallelLoopState která může být použita k předčasnému přerušení smyčky, a nějaký místní stav, který může být sdílen mezi iteracemi, které se provádějí ve stejném vlákně.
Delegát localInit
se vyvolá jednou pro každý úkol, který se účastní provádění smyčky, a vrátí počáteční místní stav pro každý z těchto úkolů. Tyto počáteční stavy se předávají prvním body
vyvoláním každého úkolu. Každé následné vyvolání těla pak vrátí pravděpodobně změněnou hodnotu stavu, která se předá dalšímu vyvolání těla. Nakonec poslední vyvolání textu u každého úkolu vrátí hodnotu stavu, která se předá delegátovi localFinally
. Delegát je localFinally
vyvolán jednou pro každé vlákno, aby provedl poslední akci v místním stavu každého úkolu. Tento delegát může být vyvolán současně na více úlohách; proto musíte synchronizovat přístup ke všem sdíleným proměnným.
Metoda Parallel.ForEach může používat více úloh než vláken za dobu životnosti svého provádění, protože se stávající úkoly dokončí a nahradí je novými úkoly. To dává podkladovému TaskScheduler objektu možnost přidat, změnit nebo odebrat vlákna, která obsluhují smyčku.
Viz také
Platí pro
ForEach<TSource,TLocal>(IEnumerable<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
foreach
Provede operaci (For Each
v jazyce Visual Basic) s místními daty vlákna a 64bitovými indexy na objektuIEnumerable, ve kterém mohou běžet paralelně iterace, konfigurovat možnosti smyčky a stav smyčky lze monitorovat a manipulovat s ní.
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 dat ve zdroji.
- TLocal
Typ místních dat vlákna.
Parametry
- source
- IEnumerable<TSource>
Výčtový zdroj dat.
- parallelOptions
- ParallelOptions
Objekt, který konfiguruje chování této operace.
- localInit
- Func<TLocal>
Delegát funkce, který vrací počáteční stav místních dat pro každý úkol.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Delegát, který je vyvolán jednou za iteraci.
- localFinally
- Action<TLocal>
Delegát, který provede poslední akci s místním stavem každého úkolu.
Návraty
Struktura obsahující informace o tom, která část smyčky byla dokončena.
Výjimky
Argument source
je null
.
-nebo-
Argument parallelOptions
je null
.
-nebo-
Argument body
je null
.
-nebo-
Argument localInit
je null
.
-nebo-
Argument localFinally
je null
.
Argument CancellationToken v argumentu parallelOptions
je zrušen.
Přidružená CancellationTokenSource k objektu CancellationToken v souboru parallelOptions
byla odstraněna.
Výjimka, která obsahuje všechny jednotlivé výjimky vyvolané ve všech vláknech.
Poznámky
Delegát je body
vyvolán jednou pro každý prvek v source
výčet. Je k dispozici s následujícími parametry: aktuální prvek, instance, ParallelLoopState která může být použita k předčasnému přerušení smyčky, index aktuálního prvku (Int64) a nějaký místní stav, který může být sdílen mezi iteracemi, které se provádějí ve stejném vlákně.
Delegát localInit
se vyvolá jednou pro každý úkol, který se účastní provádění smyčky, a vrátí počáteční místní stav pro každý z těchto úkolů. Tyto počáteční stavy se předávají prvním body
vyvoláním každého úkolu. Každé následné vyvolání těla pak vrátí pravděpodobně změněnou hodnotu stavu, která se předá dalšímu vyvolání těla. Nakonec poslední vyvolání textu u každého úkolu vrátí hodnotu stavu, která se předá delegátovi localFinally
. Delegát je localFinally
vyvolán jednou pro každé vlákno, aby provedl poslední akci v místním stavu každého úkolu. Tento delegát může být vyvolán současně na více úlohách; proto musíte synchronizovat přístup ke všem sdíleným proměnným.
Metoda Parallel.ForEach může používat více úloh než vláken za dobu životnosti svého provádění, protože se stávající úkoly dokončí a nahradí je novými úkoly. To dává podkladovému TaskScheduler objektu možnost přidat, změnit nebo odebrat vlákna, která obsluhují smyčku.
Viz také
Platí pro
ForEach<TSource,TLocal>(Partitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
Provede foreach
operaci (For Each
v jazyce Visual Basic) s místními daty vlákna na Partitioner zařízení, ve kterém mohou běžet paralelně iterace, konfigurovat možnosti smyčky a stav smyčky lze monitorovat a manipulovat s ní.
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ů v source
.
- TLocal
Typ místních dat vlákna.
Parametry
- source
- Partitioner<TSource>
Dělicí nástroj, který obsahuje původní zdroj dat.
- parallelOptions
- ParallelOptions
Objekt, který konfiguruje chování této operace.
- localInit
- Func<TLocal>
Delegát funkce, který vrací počáteční stav místních dat pro každý úkol.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Delegát, který je vyvolán jednou za iteraci.
- localFinally
- Action<TLocal>
Delegát, který provede poslední akci s místním stavem každého úkolu.
Návraty
Struktura obsahující informace o tom, která část smyčky byla dokončena.
Výjimky
Argument source
je null
.
-nebo-
Argument parallelOptions
je null
.
-nebo-
Argument body
je null
.
-nebo-
Argument localInit
je null
.
-nebo-
Argument localFinally
je null
.
Vlastnost SupportsDynamicPartitions v nástroji source
Partitioner vrátí false
nebo oddíly.null
Výjimka, která obsahuje všechny jednotlivé výjimky vyvolané ve všech vláknech.
Argument CancellationToken v argumentu parallelOptions
je zrušen.
Přidružená CancellationTokenSource k objektu CancellationToken v souboru parallelOptions
byla odstraněna.
Poznámky
Toto přetížení je k dispozici pro scénáře, ve kterých chcete přepsat výchozí schéma dělení. Například u malých smyček může být užitečné rozdělení rozsahu. Metoda ForEach očekává, že vlastní dělicí nástroje budou podporovat dynamické dělení. Toto přetížení je k dispozici pro scénáře s malými těly smyčky, kterým může prospět dělení statického rozsahu. Děliče musí podporovat dynamické oddíly. Další informace najdete v tématech Vlastní dělicí nástroje pro PLINQ a TPL a Postupy: Implementace dynamických oddílů.
Delegát localInit
se vyvolá jednou pro každý úkol, který se účastní provádění smyčky, a vrátí počáteční místní stav pro každý z těchto úkolů. Tyto počáteční stavy se předávají prvním body
vyvoláním každého úkolu. Každé následné vyvolání těla pak vrátí pravděpodobně změněnou hodnotu stavu, která se předá dalšímu vyvolání těla. Nakonec poslední vyvolání textu u každého úkolu vrátí hodnotu stavu, která se předá delegátovi localFinally
. Delegát je localFinally
vyvolán jednou pro každou úlohu, aby provedl konečnou akci v místním stavu každého úkolu. Tento delegát může být vyvolán současně na více úlohách; proto musíte synchronizovat přístup ke všem sdíleným proměnným.
Metoda Parallel.ForEach může používat více úloh než vláken za dobu životnosti svého provádění, protože se stávající úkoly dokončí a nahradí je novými úkoly. To dává podkladovému TaskScheduler objektu možnost přidat, změnit nebo odebrat vlákna, která obsluhují smyčku.
Viz také
Platí pro
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, ParallelOptions, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
Provede foreach
operaci (For Each
v jazyce Visual Basic) s 64bitovými indexy a s místními daty vlákna na objektu OrderablePartitioner<TSource> , ve kterém mohou běžet paralelně iterace , je možné nakonfigurovat možnosti smyčky a stav smyčky lze monitorovat a manipulovat s ní.
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ů v source
.
- TLocal
Typ místních dat vlákna.
Parametry
Uspořádaný dělicí nástroj, který obsahuje původní zdroj dat.
- parallelOptions
- ParallelOptions
Objekt, který konfiguruje chování této operace.
- localInit
- Func<TLocal>
Delegát funkce, který vrací počáteční stav místních dat pro každý úkol.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Delegát, který je vyvolán jednou za iteraci.
- localFinally
- Action<TLocal>
Delegát, který provede poslední akci s místním stavem každého úkolu.
Návraty
Struktura obsahující informace o tom, která část smyčky byla dokončena.
Výjimky
Argument source
je null
.
-nebo-
Argument parallelOptions
je null
.
-nebo-
Argument body
je null
.
-nebo-
Argument localInit
nebo localFinally
je null
.
Vlastnost SupportsDynamicPartitions v nástroji source
Partitioner vrátí false
nebo oddíly.null
Výjimka, která obsahuje všechny jednotlivé výjimky vyvolané ve všech vláknech.
Argument CancellationToken v argumentu parallelOptions
je zrušen.
Přidružená CancellationTokenSource k objektu CancellationToken v souboru parallelOptions
byla odstraněna.
Poznámky
Toto přetížení je k dispozici pro scénáře, ve kterých chcete přepsat výchozí schéma dělení. Například u malých smyček může být užitečné rozdělení rozsahu. Metoda ForEach očekává, že vlastní dělicí nástroje budou podporovat dynamické dělení. Další informace najdete v tématech Vlastní dělicí nástroje pro PLINQ a TPL a Postupy: Implementace dynamických oddílů.
Delegát localInit
se vyvolá jednou pro každý úkol, který se účastní provádění smyčky, a vrátí počáteční místní stav pro každý z těchto úkolů. Tyto počáteční stavy se předávají prvním body
vyvoláním každého úkolu. Každé následné vyvolání těla pak vrátí pravděpodobně změněnou hodnotu stavu, která se předá dalšímu vyvolání těla. Nakonec poslední vyvolání textu v každém vlákně vrátí hodnotu stavu, která je předána delegátovi localFinally
. Delegát je localFinally
vyvolán jednou pro každou úlohu, aby provedl konečnou akci v místním stavu každého úkolu. Tento delegát může být vyvolán současně na více úlohách; proto musíte synchronizovat přístup ke všem sdíleným proměnným.
Metoda Parallel.ForEach může používat více úloh než vláken za dobu životnosti svého provádění, protože se stávající úkoly dokončí a nahradí je novými úkoly. To dává podkladovému TaskScheduler objektu možnost přidat, změnit nebo odebrat vlákna, která obsluhují smyčku.
Viz také
Platí pro
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
foreach
Spustí operaci (For Each
v jazyce Visual Basic) s místními daty vlákna na objektuIEnumerable, ve kterém iterace mohou běžet paralelně a stav smyčky lze monitorovat a manipulovat s ním.
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 dat ve zdroji.
- TLocal
Typ místních dat vlákna.
Parametry
- source
- IEnumerable<TSource>
Výčtový zdroj dat.
- localInit
- Func<TLocal>
Delegát funkce, který vrací počáteční stav místních dat pro každý úkol.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Delegát, který je vyvolán jednou za iteraci.
- localFinally
- Action<TLocal>
Delegát, který provede poslední akci s místním stavem každého úkolu.
Návraty
Struktura, která obsahuje informace o tom, která část smyčky byla dokončena.
Výjimky
Argument source
je null
.
-nebo-
Argument body
je null
.
-nebo-
Argument localInit
je null
.
-nebo-
Argument localFinally
je null
.
Výjimka, která obsahuje všechny jednotlivé výjimky vyvolané ve všech vláknech.
Příklady
Následující příklad ukazuje, jak použít metodu s místním stavem 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
Poznámky
Delegát je body
vyvolán jednou pro každý prvek v source
výčet. Je k dispozici s následujícími parametry: aktuální prvek, instance, ParallelLoopState která může být použita k předčasnému přerušení smyčky, a nějaký místní stav, který může být sdílen mezi iteracemi, které se provádějí ve stejném vlákně.
Delegát localInit
se vyvolá jednou pro každý úkol, který se účastní provádění smyčky, a vrátí počáteční místní stav pro každý z těchto úkolů. Tyto počáteční stavy se předávají prvním body
vyvoláním každého úkolu. Každé následné vyvolání těla pak vrátí pravděpodobně změněnou hodnotu stavu, která se předá dalšímu vyvolání těla. Nakonec poslední vyvolání textu u každého úkolu vrátí hodnotu stavu, která se předá delegátovi localFinally
. Delegát je localFinally
vyvolán jednou pro každé vlákno, aby provedl poslední akci v místním stavu každého úkolu. Tento delegát může být vyvolán současně na více úlohách; proto musíte synchronizovat přístup ke všem sdíleným proměnným.
Metoda Parallel.ForEach může používat více úloh než vláken po dobu životnosti provádění, protože se stávající úlohy dokončí a nahradí se novými úkoly. To dává podkladovému TaskScheduler objektu možnost přidat, změnit nebo odebrat vlákna, která obsluhují smyčku.
Viz také
Platí pro
ForEach<TSource,TLocal>(IEnumerable<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
foreach
Spustí operaci (For Each
v jazyce Visual Basic) s místními daty vlákna na objektuIEnumerable, ve kterém iterace mohou běžet paralelně a stav smyčky lze monitorovat a zpracovávat.
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 dat ve zdroji.
- TLocal
Typ místních dat vlákna.
Parametry
- source
- IEnumerable<TSource>
Výčtový zdroj dat.
- localInit
- Func<TLocal>
Delegát funkce, který vrací počáteční stav místních dat pro každý úkol.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Delegát, který je vyvolán jednou za iteraci.
- localFinally
- Action<TLocal>
Delegát, který provede poslední akci s místním stavem každého úkolu.
Návraty
Struktura, která obsahuje informace o tom, která část smyčky byla dokončena.
Výjimky
Argument source
je null
.
-nebo-
Argument body
je null
.
-nebo-
Argument localInit
je null
.
-nebo-
Argument localFinally
je null
.
Výjimka, která obsahuje všechny jednotlivé výjimky vyvolané u všech vláken.
Poznámky
Delegát je body
vyvolán jednou pro každý prvek v source
výčtu. Je k dispozici s následujícími parametry: aktuální prvek, instance, ParallelLoopState která může být použita k předčasnému přerušení smyčky, index aktuálního prvku (Int64) a nějaký místní stav, který může být sdílen mezi iteracemi, které se spouští ve stejném vlákně.
Delegát localInit
je vyvolán jednou pro každý úkol, který se účastní provádění smyčky a vrátí počáteční místní stav pro každý z těchto úkolů. Tyto počáteční stavy se předávají prvním body
vyvoláním každého úkolu. Každé následné vyvolání těla pak vrátí pravděpodobně modifikovanou hodnotu stavu, která se předá dalšímu vyvolání těla. Nakonec poslední vyvolání textu u každého úkolu vrátí hodnotu stavu, která je předána delegátovi localFinally
. Delegát localFinally
je vyvolán jednou pro každou úlohu, aby se provedla konečná akce v místním stavu každého úkolu. Tento delegát může být vyvolána současně na více úloh; Proto je nutné synchronizovat přístup ke všem sdíleným proměnným.
Metoda Parallel.ForEach může používat více úloh než vláken po dobu životnosti provádění, protože se stávající úlohy dokončí a nahradí se novými úkoly. To dává podkladovému TaskScheduler objektu možnost přidat, změnit nebo odebrat vlákna, která obsluhují smyčku.
Viz také
Platí pro
ForEach<TSource,TLocal>(Partitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,TLocal,TLocal>, Action<TLocal>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
foreach
Spustí operaci (For Each
v jazyce Visual Basic) s místními daty vlákna na Partitioner , ve kterém iterace mohou běžet paralelně a stav smyčky lze monitorovat a manipulovat s ním.
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 prvků v source
.
- TLocal
Typ místních dat vlákna.
Parametry
- source
- Partitioner<TSource>
Dělicí nástroj, který obsahuje původní zdroj dat.
- localInit
- Func<TLocal>
Delegát funkce, který vrací počáteční stav místních dat pro každý úkol.
- body
- Func<TSource,ParallelLoopState,TLocal,TLocal>
Delegát, který je vyvolán jednou za iteraci.
- localFinally
- Action<TLocal>
Delegát, který provede poslední akci s místním stavem každého úkolu.
Návraty
Struktura, která obsahuje informace o tom, která část smyčky byla dokončena.
Výjimky
Argument source
je null
.
-nebo-
Argument body
je null
.
-nebo-
Argument localInit
je null
.
-nebo-
Argument localFinally
je null
.
Vlastnost SupportsDynamicPartitions v nástroji source
Partitioner vrací false
nebo partitioner vrací null
oddíly.
Výjimka, která obsahuje všechny jednotlivé výjimky vyvolané u všech vláken.
Poznámky
Toto přetížení je k dispozici pro scénáře, ve kterých chcete přepsat výchozí schéma dělení. Například u malých smyček může být výhodné rozdělení rozsahu. Metoda ForEach očekává, že vlastní dělicí nástroje budou podporovat dynamické dělení. Další informace najdete v tématech Vlastní dělicí nástroje pro PLINQ a TPL a Postupy: Implementace dynamických oddílů.
Delegát localInit
je vyvolán jednou pro každé vlákno, které se účastní provádění smyčky a vrátí počáteční místní stav pro každou z těchto úloh. Tyto počáteční stavy se předávají prvním body
vyvoláním každého úkolu. Každé následné vyvolání těla pak vrátí pravděpodobně modifikovanou hodnotu stavu, která se předá dalšímu vyvolání těla. Nakonec poslední vyvolání textu u každého úkolu vrátí hodnotu stavu, která je předána delegátovi localFinally
. Delegát localFinally
je vyvolán jednou pro každou úlohu, aby se provedla konečná akce v místním stavu každého úkolu. Tento delegát může být vyvolána současně na více úloh; Proto je nutné synchronizovat přístup ke všem sdíleným proměnným.
Metoda Parallel.ForEach může používat více úloh než vláken po dobu životnosti provádění, protože se stávající úlohy dokončí a nahradí se novými úkoly. To dává podkladovému TaskScheduler objektu možnost přidat, změnit nebo odebrat vlákna, která obsluhují smyčku.
Viz také
Platí pro
ForEach<TSource,TLocal>(OrderablePartitioner<TSource>, Func<TLocal>, Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>, Action<TLocal>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
foreach
Provede operaci (For Each
v jazyce Visual Basic) s místními daty vlákna na OrderablePartitioner<TSource> , ve kterém iterace mohou běžet paralelně, možnosti smyčky lze konfigurovat a stav smyčky lze monitorovat a manipulovat s ní.
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 prvků v source
.
- TLocal
Typ místních dat vlákna.
Parametry
Uspořádaný dělicí nástroj, který obsahuje původní zdroj dat.
- localInit
- Func<TLocal>
Delegát funkce, který vrací počáteční stav místních dat pro každý úkol.
- body
- Func<TSource,ParallelLoopState,Int64,TLocal,TLocal>
Delegát, který je vyvolán jednou za iteraci.
- localFinally
- Action<TLocal>
Delegát, který provede poslední akci s místním stavem každého úkolu.
Návraty
Struktura, která obsahuje informace o tom, která část smyčky byla dokončena.
Výjimky
Argument source
je null
.
-nebo-
Argument body
je null
.
-nebo-
Argument localInit
je null
.
-nebo-
Argument localFinally
je null
.
Vlastnost SupportsDynamicPartitions v nástroji source
Partitioner vrací false
nebo partitioner vrací null
oddíly.
Výjimka, která obsahuje všechny jednotlivé výjimky vyvolané u všech vláken.
Poznámky
Toto přetížení je k dispozici pro scénáře, ve kterých chcete přepsat výchozí schéma dělení. Například u malých smyček může být výhodné rozdělení rozsahu. Metoda ForEach očekává, že vlastní dělicí nástroje budou podporovat dynamické dělení. Další informace najdete v tématech Vlastní dělicí nástroje pro PLINQ a TPL a Postupy: Implementace dynamických oddílů.
Delegát localInit
je vyvolán jednou pro každý úkol, který se účastní provádění smyčky a vrátí počáteční místní stav pro každý z těchto úkolů. Tyto počáteční stavy se předávají prvním body
vyvoláním každého úkolu. Každé následné vyvolání těla pak vrátí pravděpodobně modifikovanou hodnotu stavu, která se předá dalšímu vyvolání těla. Nakonec poslední vyvolání textu u každého úkolu vrátí hodnotu stavu, která je předána delegátovi localFinally
. Delegát localFinally
je vyvolán jednou pro každou úlohu, aby se provedla konečná akce v místním stavu každého úkolu. Tento delegát může být vyvolána současně na více úloh; Proto je nutné synchronizovat přístup ke všem sdíleným proměnným.
Metoda Parallel.ForEach může používat více úloh než vláken po dobu životnosti provádění, protože se stávající úlohy dokončí a nahradí se novými úkoly. To dává podkladovému TaskScheduler objektu možnost přidat, změnit nebo odebrat vlákna, která obsluhují smyčku.
Viz také
Platí pro
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
Provede foreach
operaci IEnumerable (For Each
v jazyce Visual Basic), ve které iterace mohou běžet paralelně a je možné nakonfigurovat možnosti smyčky.
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 dat ve zdroji.
Parametry
- source
- IEnumerable<TSource>
Výčtový zdroj dat.
- parallelOptions
- ParallelOptions
Objekt, který konfiguruje chování této operace.
- body
- Action<TSource>
Delegát, který je vyvolán jednou za iteraci.
Návraty
Struktura obsahující informace o tom, která část smyčky byla dokončena.
Výjimky
Hodnota CancellationToken v argumentu parallelOptions
je zrušena.
Argument source
je null
.
-nebo-
Argument parallelOptions
je null
.
-nebo-
Argument body
je null
.
Výjimka, která obsahuje všechny jednotlivé výjimky vyvolané ve všech vláknech.
Přidružená CancellationTokenSource k objektu CancellationToken v souboru parallelOptions
byla odstraněna.
Poznámky
Delegát je body
vyvolán jednou pro každý prvek v source
výčet. Je k dispozici s aktuálním prvkem jako parametrem.
Viz také
Platí pro
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
Spustí foreach
operaci IEnumerable (For Each
v jazyce Visual Basic), ve které iterace mohou běžet paralelně, možnosti smyčky lze nakonfigurovat a stav smyčky lze monitorovat a manipulovat s ní.
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 dat ve zdroji.
Parametry
- source
- IEnumerable<TSource>
Výčtový zdroj dat.
- parallelOptions
- ParallelOptions
Objekt, který konfiguruje chování této operace.
- body
- Action<TSource,ParallelLoopState>
Delegát, který je vyvolán jednou za iteraci.
Návraty
Struktura obsahující informace o tom, která část smyčky byla dokončena.
Výjimky
Argument CancellationToken v argumentu parallelOptions
je zrušen.
Argument source
je null
.
-nebo-
Argument parallelOptions
je null
.
-nebo-
Argument body
je null
.
Výjimka, která obsahuje všechny jednotlivé výjimky vyvolané ve všech vláknech.
Přidružená CancellationTokenSource k objektu CancellationToken v souboru parallelOptions
byla odstraněna.
Poznámky
Delegát je body
vyvolán jednou pro každý prvek v source
výčet. Je k dispozici s následujícími parametry: aktuální prvek a ParallelLoopState instance, která může být použita k předčasnému přerušení smyčky.
Viz také
Platí pro
ForEach<TSource>(OrderablePartitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
Provede foreach
operaci OrderablePartitioner<TSource> (For Each
v jazyce Visual Basic), ve které iterace mohou běžet paralelně, možnosti smyčky lze nakonfigurovat a stav smyčky lze monitorovat a manipulovat s ní.
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ů v source
.
Parametry
Uspořádaný dělicí nástroj, který obsahuje původní zdroj dat.
- parallelOptions
- ParallelOptions
Objekt, který konfiguruje chování této operace.
- body
- Action<TSource,ParallelLoopState,Int64>
Delegát, který je vyvolán jednou za iteraci.
Návraty
Struktura obsahující informace o tom, která část smyčky byla dokončena.
Výjimky
Argument CancellationToken v argumentu parallelOptions
je zrušen.
Argument source
je null
.
-nebo-
Argument parallelOptions
je null
.
-nebo-
Argument body
je null
.
Přidružená CancellationTokenSource k objektu CancellationToken v souboru parallelOptions
byla odstraněna.
Vlastnost SupportsDynamicPartitions v uspořádatelném partitioneru source
vrátí false
.
-nebo-
Vlastnost KeysNormalized v uspořádatelném partitioneru source
vrátí false
.
-nebo-
Výjimka, která je vyvolán, když některé metody v uspořádatelném partitioneru source
vrátí null
.
Výjimka, která je vyvolán, aby obsahovala výjimku vyvolanou z jednoho ze zadaných delegátů.
Poznámky
Toto přetížení je k dispozici pro scénáře, ve kterých chcete přepsat výchozí schéma dělení. Například u malých smyček může být užitečné rozdělení rozsahu. Metoda Parallel.ForEach očekává, že vlastní dělicí nástroje budou podporovat dynamické dělení. Další informace najdete v tématech Vlastní dělicí nástroje pro PLINQ a TPL a Postupy: Implementace dynamických oddílů.
Viz také
Platí pro
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
Provede foreach
operaci Partitioner (For Each
v jazyce Visual Basic), ve které iterace mohou běžet paralelně a je možné nakonfigurovat možnosti smyčky.
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ů v source
.
Parametry
- source
- Partitioner<TSource>
Dělicí nástroj, který obsahuje původní zdroj dat.
- parallelOptions
- ParallelOptions
Objekt, který konfiguruje chování této operace.
- body
- Action<TSource>
Delegát, který je vyvolán jednou za iteraci.
Návraty
Struktura obsahující informace o tom, která část smyčky byla dokončena.
Výjimky
Argument CancellationToken v argumentu parallelOptions
je zrušen.
Přidružená CancellationTokenSource k objektu CancellationToken v souboru parallelOptions
byla odstraněna.
Argument source
je null
.
-nebo-
Argument parallelOptions
je null
.
-nebo-
Argument body
je null
.
Vlastnost SupportsDynamicPartitions v partitioneru source
vrátí false
.
-nebo-
Výjimka, která se vyvolá, když některé metody v partitioneru source
vrátí null
.
Výjimka, která je vyvolán, aby obsahovala výjimku vyvolanou z jednoho ze zadaných delegátů.
Poznámky
Toto přetížení je k dispozici pro scénáře, ve kterých chcete přepsat výchozí schéma dělení. Například u malých smyček může být užitečné rozdělení rozsahu. Metoda Parallel.ForEach očekává, že vlastní dělicí nástroje budou podporovat dynamické dělení. Další informace najdete v tématech Vlastní dělicí nástroje pro PLINQ a TPL a Postupy: Implementace dynamických oddílů.
Viz také
Platí pro
ForEach<TSource>(IEnumerable<TSource>, ParallelOptions, Action<TSource,ParallelLoopState,Int64>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
Provede foreach
operaci (For Each
v jazyce Visual Basic) s 64bitovými indexy na objektu IEnumerable , ve kterém mohou běžet paralelně iterace, konfigurovat možnosti smyčky a stav smyčky lze monitorovat a manipulovat s ní.
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 dat ve zdroji.
Parametry
- source
- IEnumerable<TSource>
Výčtový zdroj dat.
- parallelOptions
- ParallelOptions
Objekt, který konfiguruje chování této operace.
- body
- Action<TSource,ParallelLoopState,Int64>
Delegát, který je vyvolán jednou za iteraci.
Návraty
Struktura obsahující informace o tom, která část smyčky byla dokončena.
Výjimky
Argument CancellationToken v argumentu parallelOptions
je zrušen.
Argument source
je null
.
-nebo-
Argument parallelOptions
je null
.
-nebo-
Argument body
je null
.
Výjimka, která obsahuje všechny jednotlivé výjimky vyvolané ve všech vláknech.
Přidružená CancellationTokenSource k objektu CancellationToken v souboru parallelOptions
byla odstraněna.
Poznámky
Delegát je body
vyvolán jednou pro každý prvek v source
výčet. Je k dispozici s následujícími parametry: aktuální prvek, instance, ParallelLoopState která může být použita k předčasnému přerušení smyčky, a index aktuálního prvku (Int64).
Viz také
Platí pro
ForEach<TSource>(Partitioner<TSource>, Action<TSource,ParallelLoopState>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
foreach
Spustí operaci (For Each
v jazyce Visual Basic) na Partitioner , ve kterém iterace mohou běžet paralelně a stav smyčky lze monitorovat a manipulovat s ním.
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 prvků v source
.
Parametry
- source
- Partitioner<TSource>
Dělicí nástroj, který obsahuje původní zdroj dat.
- body
- Action<TSource,ParallelLoopState>
Delegát, který je vyvolán jednou za iteraci.
Návraty
Struktura, která obsahuje informace o tom, která část smyčky byla dokončena.
Výjimky
Vlastnost SupportsDynamicPartitions v partitioneru source
vrátí false
.
-nebo-
Metoda v partitioneru source
vrátí null
.
-nebo-
Metoda GetPartitions(Int32) v partitioneru source
nevrací správný počet oddílů.
Výjimka, která je vyvolán, aby obsahovala výjimku vyvolanou z jednoho ze zadaných delegátů.
Poznámky
Toto přetížení je k dispozici pro scénáře, ve kterých chcete přepsat výchozí schéma dělení. Například u malých smyček může být výhodné rozdělení rozsahu. Metoda Parallel.ForEach očekává, že vlastní dělicí nástroje budou podporovat dynamické dělení. Další informace najdete v tématech Vlastní dělicí nástroje pro PLINQ a TPL a Postupy: Implementace dynamických oddílů.
Viz také
Platí pro
ForEach<TSource>(Partitioner<TSource>, Action<TSource>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
foreach
Spustí operaci (For Each
v jazyce Visual Basic) na Partitioner , ve kterém iterace mohou běžet paralelně.
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 prvků v source
.
Parametry
- source
- Partitioner<TSource>
Dělicí nástroj, který obsahuje původní zdroj dat.
- body
- Action<TSource>
Delegát, který je vyvolán jednou za iteraci.
Návraty
Struktura, která obsahuje informace o tom, která část smyčky byla dokončena.
Výjimky
Vlastnost SupportsDynamicPartitions v dělicím nástroji source
vrátí false
.
-nebo-
Výjimka, která se vyvolá, když všechny metody v partitioneru source
vrátí null
.
-nebo-
Metoda GetPartitions(Int32) v partitioneru source
nevrací správný počet oddílů.
Výjimka, která je vyvolán, aby obsahovala výjimku vyvolanou z jednoho ze zadaných delegátů.
Příklady
Následující příklad ukazuje, jak implementovat dělicí nástroj rozsahu pro použití s 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
Poznámky
Toto přetížení je k dispozici pro scénáře, ve kterých chcete přepsat výchozí schéma dělení. Například u malých smyček může být výhodné rozdělení rozsahu. Metoda Parallel.ForEach očekává, že vlastní dělicí nástroje budou podporovat dynamické dělení. Další informace najdete v tématech Vlastní dělicí nástroje pro PLINQ a TPL a Postupy: Implementace dynamických oddílů.
Viz také
Platí pro
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState,Int64>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
foreach
Spustí operaci (For Each
v jazyce Visual Basic) s 64bitovými indexy na objektuIEnumerable, ve kterém iterace mohou běžet paralelně a stav smyčky lze monitorovat a manipulovat s 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 dat ve zdroji.
Parametry
- source
- IEnumerable<TSource>
Výčtový zdroj dat.
- body
- Action<TSource,ParallelLoopState,Int64>
Delegát, který je vyvolán jednou za iteraci.
Návraty
Struktura, která obsahuje informace o tom, která část smyčky byla dokončena.
Výjimky
Výjimka, která obsahuje všechny jednotlivé výjimky vyvolané u všech vláken.
Poznámky
Delegát je body
vyvolán jednou pro každý prvek v source
výčtu. Je k dispozici s následujícími parametry: aktuální prvek, instance, ParallelLoopState která může být použita k předčasnému přerušení smyčky, a index aktuálního prvku (Int64).
Viz také
Platí pro
ForEach<TSource>(OrderablePartitioner<TSource>, Action<TSource,ParallelLoopState,Int64>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
foreach
Spustí operaci (For Each
v jazyce Visual Basic) na OrderablePartitioner<TSource> , ve kterém iterace mohou běžet paralelně a stav smyčky lze monitorovat a manipulovat s ním.
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 prvků v source
.
Parametry
Uspořádaný dělicí nástroj, který obsahuje původní zdroj dat.
- body
- Action<TSource,ParallelLoopState,Int64>
Delegát, který je vyvolán jednou za iteraci.
Návraty
Struktura, která obsahuje informace o tom, která část smyčky byla dokončena.
Výjimky
Vlastnost SupportsDynamicPartitions v seřazené dělicí rutině source
vrátí false
.
-nebo-
Vlastnost KeysNormalized ve zdrojovém seřazené dělicí rutině vrátí false
.
-nebo-
Všechny metody ve zdrojovém uspořádaelném dělení vrátí null
.
Výjimka vyvolaná jedním ze zadaných delegátů.
Poznámky
Toto přetížení je k dispozici pro scénáře, ve kterých chcete přepsat výchozí schéma dělení. Například u malých smyček může být výhodné rozdělení rozsahu. Metoda Parallel.ForEach očekává, že vlastní dělicí nástroje budou podporovat dynamické dělení. Další informace najdete v tématech Vlastní dělicí nástroje pro PLINQ a TPL a Postupy: Implementace dynamických oddílů.
Viz také
Platí pro
ForEach<TSource>(IEnumerable<TSource>, Action<TSource>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
foreach
Spustí operaci (For Each
v jazyce Visual Basic) na , IEnumerable ve kterém iterace mohou běžet paralelně.
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 dat ve zdroji.
Parametry
- source
- IEnumerable<TSource>
Výčtový zdroj dat.
- body
- Action<TSource>
Delegát, který je vyvolán jednou za iteraci.
Návraty
Struktura, která obsahuje informace o tom, která část smyčky byla dokončena.
Výjimky
Výjimka, která obsahuje všechny jednotlivé výjimky vyvolané u všech vláken.
Příklady
Následující příklad používá metodu ForEach<TSource>(IEnumerable<TSource>, Action<TSource>) k počítání počtu samohlásek a znaků, které nejsou prázdné znaky v textovém souboru. V tomto případě se ParallelLoopResult hodnota vrácená metodou ignoruje. Všimněte si, že protože operace mohou běžet paralelně, musíte zajistit, že zvýšení proměnných čítače je atomická operace a že více vláken se nepokusí přistupovat k proměnným čítače současně. Pro tento účel používá lock
příklad příkaz (v jazyce C#) a SyncLock
příkaz (v jazyce 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
Poznámky
Delegát je body
vyvolán jednou pro každý prvek v source
výčtu. Je k dispozici s aktuálním prvkem jako parametrem.
Viz také
Platí pro
ForEach<TSource>(Partitioner<TSource>, ParallelOptions, Action<TSource,ParallelLoopState>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
foreach
Spustí operaci (For Each
v jazyce Visual Basic) na Partitioner , ve kterém iterace mohou běžet paralelně, možnosti smyčky lze konfigurovat a stav smyčky lze monitorovat a manipulovat s ním.
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 prvků v source
.
Parametry
- source
- Partitioner<TSource>
Dělicí nástroj, který obsahuje původní zdroj dat.
- parallelOptions
- ParallelOptions
Objekt, který konfiguruje chování této operace.
- body
- Action<TSource,ParallelLoopState>
Delegát, který je vyvolán jednou za iteraci.
Návraty
Struktura, která obsahuje informace o tom, která část smyčky byla dokončena.
Výjimky
Hodnota CancellationToken v argumentu parallelOptions
je zrušena.
Přidružená CancellationTokenSource k v CancellationToken souboru parallelOptions
byla odstraněna.
Argument source
je null
.
-nebo-
Argument parallelOptions
je null
.
-nebo-
Argument body
je null
.
Vlastnost SupportsDynamicPartitions v dělicím nástroji source
vrátí false
.
-nebo-
Výjimka, která se vyvolá, když všechny metody v partitioneru source
vrátí null
.
Výjimka, která je vyvolán, aby obsahovala výjimku vyvolanou z jednoho ze zadaných delegátů.
Poznámky
Toto přetížení je k dispozici pro scénáře, ve kterých chcete přepsat výchozí schéma dělení. Například u malých smyček může být výhodné rozdělení rozsahu. Metoda Parallel.ForEach očekává, že vlastní dělicí nástroje budou podporovat dynamické dělení. Další informace najdete v tématech Vlastní dělicí nástroje pro PLINQ a TPL a Postupy: Implementace dynamických oddílů.
Viz také
Platí pro
ForEach<TSource>(IEnumerable<TSource>, Action<TSource,ParallelLoopState>)
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
- Zdroj:
- Parallel.cs
foreach
Spustí operaci (For Each
v jazyce Visual Basic) na , IEnumerable ve kterém iterace mohou běžet paralelně a stav smyčky lze monitorovat a manipulovat s ním.
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 dat ve zdroji.
Parametry
- source
- IEnumerable<TSource>
Výčtový zdroj dat.
- body
- Action<TSource,ParallelLoopState>
Delegát, který je vyvolán jednou za iteraci.
Návraty
Struktura, která obsahuje informace o tom, která část smyčky byla dokončena.
Výjimky
Výjimka, která obsahuje všechny jednotlivé výjimky vyvolané u všech vláken.
Poznámky
Delegát je body
vyvolán jednou pro každý prvek v source
výčtu. Je k dispozici s následujícími parametry: aktuální prvek a ParallelLoopState instance, která může být použita k předčasnému přerušení smyčky.