コード例 #1
0
        /// <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());
        }
コード例 #2
0
        /// <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));
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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);
        }