Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 0.87 KB | None | 0 0
  1.         public static async Task<IList<TResult>> SelectAsync<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, CancellationToken, Task<TResult>> selector, CancellationToken cancellationToken, int maxDegreesOfParallelism = 4)
  2.         {
  3.             var results = new List<TResult>();
  4.  
  5.             var activeTasks = new HashSet<Task<TResult>>();
  6.             foreach (var item in source)
  7.             {
  8.                 activeTasks.Add(selector(item, cancellationToken));
  9.                 if (activeTasks.Count >= maxDegreesOfParallelism)
  10.                 {
  11.                     var completed = await Task.WhenAny(activeTasks);
  12.                     activeTasks.Remove(completed);
  13.                     results.Add(completed.Result);
  14.                 }
  15.             }
  16.             results.AddRange(await Task.WhenAll(activeTasks));
  17.             return results;
  18.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement