/// <summary> /// Execute command /// </summary> /// <param name="executeOption">Execute option</param> /// <param name="commandEngineGroup">Command engine group</param> /// <returns>Return the execute data effect numbers</returns> internal static async Task <int> ExecuteAsync(CommandExecuteOption executeOption, IEnumerable <Tuple <ICommandEngine, List <ICommand> > > commandEngineGroup) { if (commandEngineGroup.IsNullOrEmpty()) { return(0); } var groupCount = commandEngineGroup.Count(); //Single engine if (groupCount == 1) { var firstGroup = commandEngineGroup.First(); return(await firstGroup.Item1.ExecuteAsync(executeOption, firstGroup.Item2).ConfigureAwait(false)); } //Multiple engine Task <int>[] valueTasks = new Task <int> [groupCount]; var groupIndex = 0; foreach (var engineGroupItem in commandEngineGroup) { valueTasks[groupIndex] = engineGroupItem.Item1.ExecuteAsync(executeOption, engineGroupItem.Item2); groupIndex++; } return((await Task.WhenAll(valueTasks).ConfigureAwait(false)).Sum()); }
/// <summary> /// Execute command /// </summary> /// <param name="executeOption">Execute option</param> /// <param name="commands">Commands</param> /// <returns>Return the execute data effect numbers</returns> internal static async Task <int> ExecuteAsync(CommandExecuteOption executeOption, IEnumerable <ICommand> commands) { if (commands.IsNullOrEmpty()) { return(0); } var cmdEngineGroupDictionary = GroupCommandByEngines(commands); return(await ExecuteAsync(executeOption, cmdEngineGroupDictionary.Values).ConfigureAwait(false)); }
/// <summary> /// execute command /// </summary> /// <param name="executeOption">execute option</param> /// <param name="commands">commands</param> /// <returns></returns> internal static async Task <int> ExecuteAsync(CommandExecuteOption executeOption, IEnumerable <Tuple <ICommandEngine, List <ICommand> > > commands) { if (commands.IsNullOrEmpty()) { return(0); } int result = 0; foreach (var cmdItem in commands) { result += await cmdItem.Item1.ExecuteAsync(executeOption, cmdItem.Item2.ToArray()).ConfigureAwait(false); } return(result); }
/// <summary> /// execute command /// </summary> /// <param name="executeOption">execute option</param> /// <param name="commands">commands</param> /// <returns>return the execute data numbers</returns> internal static async Task <int> ExecuteAsync(CommandExecuteOption executeOption, IEnumerable <ICommand> commands) { if (commands == null || !commands.Any()) { return(0); } var cmdGroupEngines = await GroupCommandByEnginesAsync(commands).ConfigureAwait(false); if (cmdGroupEngines == null || cmdGroupEngines.Count <= 0) { return(0); } int result = 0; foreach (var engineGroup in cmdGroupEngines) { result += await engineGroup.Value.Item1.ExecuteAsync(executeOption, engineGroup.Value.Item2.ToArray()).ConfigureAwait(false); } return(result); }