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));
}
Usage:
var tasks = Enumerable.Range(0, 10000).Select(_ => new Func<Task>(() => Worker(results))).ToList();
await ParallelForEachAsync(tasks, 1000, async func =>
{
await func();
});
No comments to display
No comments to display