When should I use async/await and when should I use parallel.foreach in C#? Are parallel and async/await serve the same purpose? What are the differences in them?
async/await is about asynchrony, whereas Parallel.ForEach
is about parallelism. They're related concepts, but not the same.
Parallel.ForEach
is used when you want to execute the same operation on all the items in a collection, in parallel, blocking the current thread until all operations have completed.
async/await is used when the current operation can't make any more progress until a particular asynchronous operation has completed, but you don't want to block the current thread. This is particularly useful in two situations:
You can combine parallelism and asynchrony by kicking off a new task which will call Parallel.ForEach
, and then awaiting that task. (Just as one example.)