In diesem Artikel wird die wichtigsten Unterscheidungen zwischen Parallel.ForEach
und der Task
-Familie (speziell Task.WhenAll
, Task.Run
usw.) in C#untersucht. Beide ermöglichen die gleichzeitige oder parallele Codeausführung, aber ihre Anwendungen, Verhaltensweisen und Aufgabenbearbeitung unterscheiden sich erheblich.
parallel.foreach:
Parallel.ForEach
, ein Mitglied des System.Threading.Tasks
-Namespace, ermöglicht eine parallele Iteration über Sammlungen. Es verteilt automatisch die Arbeitsbelastung über verfügbare Threads im Thread-Pool und ist für CPU-gebundene Vorgänge hocheffizient.
Schlüsselmerkmale:
Beispiel:
<code class="language-csharp">using System; using System.Threading.Tasks; class Program { static void Main(string[] args) { var items = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; Parallel.ForEach(items, item => { // Simulate CPU-intensive task (e.g., complex calculation) Console.WriteLine($"Processing item: {item} on thread {Task.CurrentId}"); }); Console.WriteLine("All items processed."); } }</code>
Aufgaben (Task.run, Task.whenall):
Task.Run
und Task.WhenAll
bieten eine körnige Kontrolle über asynchrone und parallele Ausführung. Während Task.Run
CPU-gebundene Arbeiten ausladen kann, wird es häufig mit asynchronem Code für I/O-gebundene Aufgaben gepaart.
Schlüsselmerkmale:
Task.WhenAll
, Task.WhenAny
). Task.Run
in Szenarien, die asynchrones Verhalten erfordern. Beispiel:
<code class="language-csharp">using System; using System.Threading.Tasks; class Program { static void Main(string[] args) { var items = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; Parallel.ForEach(items, item => { // Simulate CPU-intensive task (e.g., complex calculation) Console.WriteLine($"Processing item: {item} on thread {Task.CurrentId}"); }); Console.WriteLine("All items processed."); } }</code>
Feature | Parallel.ForEach | Task.Run / Task.WhenAll |
---|---|---|
Primary Use Case | Parallel iteration for CPU-bound tasks. | Asynchronous and parallel execution (CPU/I/O). |
Thread Control | Less control; uses the thread pool. | Full control over task creation and execution. |
Execution Type | Synchronous (blocking). | Asynchronous (non-blocking unless awaited). |
Task Type | CPU-bound tasks (parallel for loop). | General-purpose tasks (CPU-bound or I/O-bound). |
Parallelism | Parallelism | Parallel or asynchronous. |
Error Handling | Exceptions thrown per iteration. |
Task.WhenAll aggregates exceptions. |
Performance | Automatic performance tuning. | Manual task distribution management. |
Parallelismus
Parallel.ForEach
Fehlerbehandlung Verwenden Sie wenn: Task.Run
Task.WhenAll
i/o-gebundene Aufgaben sind beteiligt. Parallel.ForEach
Task.Run
Granulare Kontrolle über Aufgabenverwaltung, Stornierung oder Synchronisation ist erforderlich. Task.WhenAll
Das obige ist der detaillierte Inhalt vonAufgabe und Parallele. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!