Esempio n. 1
0
        internal void Update()
        {
            for (var i = 0; i < _chains.Count; i++)
            {
                AsyncChain chain = _chains[i];
                ChainLayer layer = _chainsLayers[(int)chain.layer];
                if (layer.paused)
                {
                    continue;
                }
                AsyncCommandResult updateResult = chain.UpdateChain();

                if (updateResult == AsyncCommandResult.Exception)
                {
                    CustomDebug.Log($"Cain '{chain.id}' finished terminated with exception");
                }

                if (!chain.isComplete && updateResult == AsyncCommandResult.Ok)
                {
                    continue;
                }
                chain.ReportComplete();
                _chainsLayers[(int)chain.layer].Dec();
                _chains.RemoveAt(i);
                i--;
            }
        }
Esempio n. 2
0
        private void ExecuteQueuedCommand(AsyncCommandResult asynResult)
        {
            Collection <PSObject> results = null;

            try
            {
                IEnumerable <ErrorRecord> error = null;
                results = _executor.ExecuteCommand(asynResult.Command, asynResult.Parameters, out error,
                                                   asynResult.ExecutionOptions);
                asynResult.SetComplete(results, false, null);
            }
            catch (Exception e)
            {
                asynResult.SetComplete(results, false, e);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Invokes execution queue
        /// </summary>
        internal AsyncCommandResult UpdateChain()
        {
            while (true)
            {
                if (_actualCommand == null)
                {
                    isComplete = _commands.Count == 0;
                    if (isComplete)
                    {
                        return(AsyncCommandResult.Ok);
                    }
                    _actualCommand = _commands.Dequeue();
                    AsyncCommandResult startResult = _actualCommand.Start();
                    if (startResult != AsyncCommandResult.Ok)
                    {
                        return(startResult);
                    }
                }

                if (_actualCommand == null)
                {
                    // chain was terminated
                    return(AsyncCommandResult.Ok);
                }

                _actualCommand.CheckNullStates();
                AsyncCommandResult updateResult = _actualCommand.UpdateStates();
                _actualCommand.CheckAndReportComplete();

                if (updateResult != AsyncCommandResult.Ok)
                {
                    return(updateResult);
                }

                if (_actualCommand.isComplete)
                {
                    _actualCommand = null;
                }
                else
                {
                    break;
                }
            }

            return(AsyncCommandResult.Ok);
        }