Recently Jon Skeet at NDC London spoke about C# 5 async/await and presented the idea of \"ordering by completion\" a list of async tasks. A link http:/
Don't use Parallel.ForEach
to execute async
code. Parallel.ForEach
doesn't understand async
, so your lambda will be turned into async void
, which won't work correctly (Parallel.ForEach
will return before all work is done; exceptions won't be handled properly; possibly other issues).
Use something like ForEachAsync()
when you have a collection of objects (not Task
s), you want to perform some async
action for each of them and the actions should execute in parallel.
Use OrderByCompletion()
when you have a collection of Task
s, you want perform some action (asynchronous or not) for the result of each Task
, the actions should not execute in parallel and you want to execute the actions based on the order in which the Task
s complete.