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