public Robot(JointMotorConfig jmc) { JointMotorConfig = jmc; // Make bluetooth connections - if it is -1 don't make connection nxtBricks = new NxtBrick[jmc.ComPorts.Length]; var connectTasks = new Task<NxtBrick>[jmc.ComPorts.Length]; for (int i = 0; i < jmc.ComPorts.Length; i++) { var comPort = jmc.ComPorts[i]; if (comPort >= 0) { int j = i; // Prevent access to modified closure connectTasks[i] = new Task<NxtBrick>(() => ConnectBrick(j, jmc.LinkTypes[j], comPort)); connectTasks[i].Start(); } } Task.WaitAll(connectTasks.Where(a => a != null).ToArray()); Logger.Log("Connected all motors"); for (int i = 0; i < connectTasks.Length; i++) { nxtBricks[i] = connectTasks[i] == null ? null : connectTasks[i].Result; } // Add joints LeftArm = new Arm("Left", AddMotorToNxt(jmc.LeftShoulderAlong), AddMotorToNxt(jmc.LeftShoulderOut), AddMotorToNxt(jmc.LeftElbowAlong), AddMotorToNxt(jmc.LeftElbowOut)); RightArm = new Arm("Right", AddMotorToNxt(jmc.RightShoulderAlong), AddMotorToNxt(jmc.RightShoulderOut), AddMotorToNxt(jmc.RightElbowAlong), AddMotorToNxt(jmc.RightElbowOut)); }
private static void ThrowAggregateIfFaulted(Task<DocumentInfo>[] tasks) { var exceptions = tasks.Where<Task>(dt => dt.IsFaulted).Select(dt => dt.Exception).ToArray(); if (exceptions.Length > 0) throw new AggregateException(exceptions); }