Rumah >pembangunan bahagian belakang >C++ >Tugas dan selari
dan Parallel.ForEach
keluarga (khusus Task
, Task.WhenAll
, dan lain -lain) dalam C#. Kedua -duanya memudahkan pelaksanaan kod serentak atau selari, tetapi aplikasi, tingkah laku, dan pengendalian tugas mereka berbeza dengan ketara. Task.Run
Parallel.Foreach:
, ahli ruang nama Parallel.ForEach
, membolehkan lelaran selari ke atas koleksi. Ia secara automatik mengedarkan beban kerja di seluruh benang yang ada di dalam kolam benang, membuktikan sangat cekap untuk operasi terikat CPU. System.Threading.Tasks
Ciri -ciri Utama:
Contoh:
<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>
Tugas (Task.Run, Task.Whenall):
dan Task.Run
menawarkan kawalan berbutir ke atas pelaksanaan asynchronous dan selari. Walaupun Task.WhenAll
boleh mengimbangi kerja terikat CPU, ia sering dipasangkan dengan kod tak segerak untuk tugas-tugas I/O. Task.Run
Ciri -ciri Utama:
Task.WhenAll
). Task.WhenAny
Fleksibiliti yang dipertingkatkan: Task.Run
<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. |
Parallelism
Parallel.ForEach
Pengendalian ralat Gunakan Bila: Task.Run
Task.WhenAll
kawalan berbutir ke atas pengurusan tugas, pembatalan, atau penyegerakan diperlukan. Parallel.ForEach
Task.Run
menggabungkan paralelisme dan asynchrony diperlukan. Task.WhenAll
Atas ialah kandungan terperinci Tugas dan selari. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!