Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static async Task<IList<TResult>> SelectAsync<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, CancellationToken, Task<TResult>> selector, CancellationToken cancellationToken, int maxDegreesOfParallelism = 4)
- {
- var results = new List<TResult>();
- var activeTasks = new HashSet<Task<TResult>>();
- foreach (var item in source)
- {
- activeTasks.Add(selector(item, cancellationToken));
- if (activeTasks.Count >= maxDegreesOfParallelism)
- {
- var completed = await Task.WhenAny(activeTasks);
- activeTasks.Remove(completed);
- results.Add(completed.Result);
- }
- }
- results.AddRange(await Task.WhenAll(activeTasks));
- return results;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement