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--; } }
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); } }
/// <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); }