private static Task[] GenerateTasks(IPostingLineCollection postingLineCollection, Predicate <IPostingLine> selector, Func <IReadOnlyCollection <IPostingLine>, Task> taskGenerator) { NullGuard.NotNull(postingLineCollection, nameof(postingLineCollection)) .NotNull(selector, nameof(selector)) .NotNull(taskGenerator, nameof(taskGenerator)); return(postingLineCollection.AsParallel() .GroupBy(postingLine => postingLine.PostingDate.Year) .Select(group => taskGenerator(group.AsParallel().Where(postingLine => selector(postingLine)).ToArray())) .ToArray()); }