public static List ParallelFor()

in Core/src/Impl/ParallelUtil.cs [18:37]


    public static List<TResult> ParallelFor<TSource, TResult>(
      this IEnumerable<TSource> sources,
      int degreeOfParallelism,
      Func<TSource, TResult> func)
    {
      var results = sources.TryGetNonEnumeratedCount(out var expectedCount) ? new List<TResult>(expectedCount) : new List<TResult>();
      var lockObj = new Lock();
      
      Parallel.ForEach(sources, new ParallelOptions() { MaxDegreeOfParallelism = degreeOfParallelism }, (x, _) =>
      {
        var result = func(x);
        lock (lockObj)
          results.Add(result);
      });
      
      if (results.Capacity > results.Count + 1024)
        results.TrimExcess();

      return results;
    }