コード例 #1
0
        static void Main(string[] args)
        {
            // Create some source data
            int[] sourceData = new int[10];
            for (int i = 0; i < sourceData.Length; i++)
            {
                sourceData[i] = i;
            }

            // Create the partitioner
            StaticPartitioner <int> partitioner = new StaticPartitioner <int>(sourceData);

            // Define a query
            IEnumerable <double> results = partitioner
                                           .AsParallel()
                                           .Select(item => Math.Pow(item, 2));

            // Enumerate the query results
            foreach (var item in results)
            {
                Console.WriteLine("Enumeration got result {0}", item);
            }

            // Wait for input before exiting
            Console.WriteLine("Press enter to finish");
            Console.ReadLine();
        }
コード例 #2
0
        internal static void Correctness()
        {
            int count = Environment.ProcessorCount * 4;

            int[] source = Enumerable.Range(0, count).ToArray(); // 0 ... 15.

            int elementAt = new StaticPartitioner <int>(source).AsParallel().Select(value => value + ComputingWorkload())
                            .ElementAt(count / 2).WriteLine() // Expected: 8,
                            .WriteLine();                     // Actual: 2.

            int first = new StaticPartitioner <int>(source).AsParallel().Select(value => value + ComputingWorkload())
                        .First()      // Expected: 0.
                        .WriteLine(); // Actual: 3.

            int last = new StaticPartitioner <int>(source).AsParallel().Select(value => value + ComputingWorkload())
                       .Last()       // Expected: 15.
                       .WriteLine(); // Actual: 13.

            new StaticPartitioner <int>(source).AsParallel().Select(value => value + ComputingWorkload())
            .Take(count / 2)   // Expected: 0 ... 7.
            .WriteLines();     // Actual: 3 2 5 7 10 11 14 15.

            new StaticPartitioner <int>(source).AsParallel().Select(value => value + ComputingWorkload())
            .Skip(count / 2)   // Expected: 8 ... 15.
            .WriteLines();     // Actual: 3 0 7 5 11 10 15 14.

            new StaticPartitioner <int>(source).AsParallel().Select(value => value + ComputingWorkload())
            .TakeWhile(value => value <= count / 2) // Expected: 0 ... 7.
            .WriteLines();                          // Actual: 3 5 8.

            new StaticPartitioner <int>(source).AsParallel().Select(value => value + ComputingWorkload())
            .SkipWhile(value => value <= count / 2) // Expected: 9 ... 15.
            .WriteLines();                          // Actual: 1 3 2 13 5 7 6 11 9 10 15 12 14.

            new StaticPartitioner <int>(source).AsParallel().Select(value => value + ComputingWorkload())
            .Reverse()     // Expected: 15 ... 0.
            .WriteLines(); // Actual: 12 8 4 2 13 9 5 1 14 10 6 0 15 11 7 3.

            bool sequentialEqual = new StaticPartitioner <int>(source).AsParallel().Select(value => value + ComputingWorkload())
                                   .SequenceEqual(new StaticPartitioner <int>(source).AsParallel()); // Expected: True.

            sequentialEqual.WriteLine();                                                             // Actual: False.

            new StaticPartitioner <int>(source).AsParallel().Select(value => value + ComputingWorkload())
            .Zip(
                second: new StaticPartitioner <int>(source).AsParallel(),
                resultSelector: (a, b) => $"({a}, {b})") // Expected: (0, 0) ... (15, 15).
            .WriteLines();                               // Actual: (3, 8) (0, 12) (1, 0) (2, 4) (6, 9) (7, 13) ...
        }
コード例 #3
0
        public void StaticPartitionerTest()
        {
            Partitioning.StaticPartitioner();

            int partitionCount       = Environment.ProcessorCount * 2;
            int valueCount           = partitionCount * 10000;
            IEnumerable <int> source = Enumerable.Range(1, valueCount);
            IEnumerable <int> values = new StaticPartitioner <int>(source)
                                       .GetPartitions(partitionCount)
                                       .Select(partition => EnumerableEx.Create(() => partition))
                                       .Concat()
                                       .OrderBy(value => value);

            EnumerableAssert.AreSequentialEqual(source, values);
        }