Task.WhenAll در مقابل Parallel.ForEach
هر دو برای اجرای همزمان چند عملیات استفاده میشوند، اما Task.WhenAll برای عملیات Async و I/O-bound و Parallel.ForEach برای عملیات CPU-bound طراحی شده است.
| ویژگی | Task.WhenAll | Parallel.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
