Пример #1
0
            static void ColumnCycle(int fromInclusive, int toInclusive, int iRow, int row, int xStride, InnerCycle innerCycle)
            {
                var column = 0;

                for (var iColumn = fromInclusive; iColumn <= toInclusive; iColumn += xStride, column++)
                {
                    innerCycle(iRow, row, iColumn, column);
                }
            }
Пример #2
0
        private static void MatrixCycle(int rowFromInclusive, int rowToInclusive, int columnFromInclusive, int columnToInclusive, int yStride, int xStride, int maxDegreeOfParallelism, InnerCycle innerCycle, CancellationToken cancellationToken = default)
        {
            OutOfRangeException.Check(nameof(maxDegreeOfParallelism), maxDegreeOfParallelism, 0);

            var iRows = new List <int>();

            for (var iRow = rowFromInclusive; iRow <= rowToInclusive; iRow += yStride)
            {
                iRows.Add(iRow);
            }

            if (maxDegreeOfParallelism > 1)
            {
                Parallel.ForEach(iRows,
                                 new ParallelOptions
                {
                    MaxDegreeOfParallelism = maxDegreeOfParallelism,
                    CancellationToken      = cancellationToken
                },
                                 iRow =>
                {
                    var row = (iRow - rowFromInclusive) / yStride;
                    ColumnCycle(columnFromInclusive, columnToInclusive, iRow, row, xStride, innerCycle);
                });
            }
            else
            {
                var row = 0;
                foreach (var iRow in iRows)
                {
                    ColumnCycle(columnFromInclusive, columnToInclusive, iRow, row, xStride, innerCycle);
                    row++;
                }
            }