Example #1
0
        public List <T> FindElements(ElementSeeker delgate)
        {
            var lockObject = new object();
            var result     = new List <T>();

            Parallel.ForEach(
                _data.Where(_ => _ != null),
                () => new List <T>(),
                delegate(T[] shard, ParallelLoopState state, long arg3, List <T> arg4)
            {
                for (var i = 0; i < shard.Length; i++)
                {
                    if (shard[i] != null && delgate(shard[i]))
                    {
                        arg4.Add(shard[i]);
                    }
                }

                return(arg4);
            },
                delegate(List <T> local)
            {
                lock (lockObject)
                {
                    result.AddRange(local);
                }
            });

            return(result);
        }
Example #2
0
 /// <summary>
 /// Find elements by scanning the list
 /// </summary>
 /// <param name="seeker">A delegate to search for the right element</param>
 /// <returns>A list of matching graph elements</returns>
 private List <AGraphElement> FindElements(ElementSeeker seeker)
 {
     return(_graphElements.AsParallel()
            .Where(_ => _ != null && seeker(_))
            .ToList());
 }