CodeShot

Task.WhenAll در مقابل Parallel.ForEach

هر دو برای اجرای همزمان چند عملیات استفاده می‌شوند، اما Task.WhenAll برای عملیات Async و I/O-bound و Parallel.ForEach برای عملیات CPU-bound طراحی شده است.

ویژگیTask.WhenAllParallel.ForEach
مناسب Asyncبلهخیر
مناسب CPUخیربله
استفاده از Thread Poolکمزیاد
awaitداردندارد
مناسب ASP.NET Coreبلهمعمولاً خیر

کِی از Task.WhenAll استفاده کنیم؟

وقتی چند درخواست HTTP، Query دیتابیس یا عملیات Async را همزمان اجرا می‌کنید.

کِی از Parallel.ForEach استفاده کنیم؟

وقتی پردازش‌های سنگین CPU مانند پردازش تصویر یا محاسبات ریاضی دارید.

مثال Task.WhenAll

await Task.WhenAll( DownloadFileAsync(), SendEmailAsync() );

مثال Parallel.ForEach

Parallel.ForEach(files, file => { Process(file); });

اشتباه رایج

استفاده از Parallel.ForEach برای متدهای async.

جمع‌بندی

I/O → Task.WhenAll

CPU → Parallel.ForEach