Async Parallel
static Task ParallelForEachAsync<T> (IEnumerable<T> source,
int degreeofParallelization,
Func<T, Task> body)
{
async Task AwaitPartition(IEnumerator<T> partition)
{
using (partition)
{
while (partition.MoveNext())
{
await body(partition.Current);
}
}
}
return Task.WhenAll(Partitioner
.Create(source)
.GetPartitions(degreeofParallelization)
.AsParallel()
.Select(AwaitPartition));
}