public static List<IHasBits> FilterList_UsingWorkers(this List<IHasBits> sourceList, Func<IHasBits, bool> filter, int numThreads) { List<IHasBits> rv = new List<IHasBits>(); var slices = NumbersUtil.GetSliceBounds(0, sourceList.Count, numThreads > sourceList.Count ? sourceList.Count : numThreads ); var workers = new HasBitsFilterWorker[slices.Length]; for (int i = 0; i < slices.Length; i++) workers[i] = new HasBitsFilterWorker(slices[i][0], slices[i][1], sourceList, filter); foreach (var w in workers) w.Thread.Join(); for (int i = 0; i < workers.Length; i++) rv.AddRange(workers[i].Accumulator); return rv; }
public static List <IHasBits> FilterList_UsingWorkers(this List <IHasBits> sourceList, Func <IHasBits, bool> filter, int numThreads) { List <IHasBits> rv = new List <IHasBits>(); var slices = NumbersUtil.GetSliceBounds(0, sourceList.Count, numThreads > sourceList.Count ? sourceList.Count : numThreads); var workers = new HasBitsFilterWorker[slices.Length]; for (int i = 0; i < slices.Length; i++) { workers[i] = new HasBitsFilterWorker(slices[i][0], slices[i][1], sourceList, filter); } foreach (var w in workers) { w.Thread.Join(); } for (int i = 0; i < workers.Length; i++) { rv.AddRange(workers[i].Accumulator); } return(rv); }