BrickPi.Movement.Vehicule.RunMotorSyncDegrees C# (CSharp) Method

RunMotorSyncDegrees() private method

private RunMotorSyncDegrees ( BrickPortMotor ports, int speeds, int degrees ) : Task
ports BrickPortMotor
speeds int
degrees int
return Task
        private async Task RunMotorSyncDegrees(BrickPortMotor[] ports, int[] speeds, int[] degrees)
        {
            if ((ports == null) || (speeds == null) || degrees == null)
                return;
            if ((ports.Length != speeds.Length) && (degrees.Length != speeds.Length))
                return;
            //make sure we have only positive degrees
            for (int i = 0; i < degrees.Length; i++)
                if (degrees[i] < 0)
                    degrees[i] = -degrees[i];
            //initialize the speed and enable motors
            int[] initval = new int[ports.Length];
            for (int i = 0; i < ports.Length; i++)
            {
                initval[i] = brick.BrickPi.Motor[(int)ports[i]].Encoder;
                StartMotor((int)ports[i], speeds[i]);
            }
            bool nonstop = true;
            while(nonstop)
            {
                bool status = false;
                for (int i = 0; i < ports.Length; i++)
                {
                    if (speeds[i] > 0)
                    {
                        if (brick.BrickPi.Motor[(int)ports[i]].Encoder >= (initval[i] + degrees[i] * 2))
                        {
                            StopMotor((int)ports[i]);
                        }
                    } else
                    {
                        if (brick.BrickPi.Motor[(int)ports[i]].Encoder <= (initval[i] - degrees[i] * 2))
                        {
                            StopMotor((int)ports[i]);
                        }

                    }
                    status |= IsRunning(ports[i]);
                }
                nonstop = status;
            }


        }