public override async Task <IScriptCommand> ExecuteAsync(ParameterDic pm) { IEntryModel entryModel = pm.GetValue <IEntryModel>(EntryKey); if (entryModel == null) { return(ResultCommand.Error(new ArgumentException(EntryKey + " is not found or not IEntryModel"))); } IDiskProfile profile = entryModel.Profile as IDiskProfile; if (profile == null) { return(ResultCommand.Error(new NotSupportedException(EntryKey + "'s Profile is not IDiskProfile"))); } using (var stream = await profile.DiskIO.OpenStreamAsync(entryModel, Access, pm.CancellationToken)) { ParameterDic pmClone = pm.Clone(); pmClone.SetValue(StreamKey, stream); logger.Debug(String.Format("{0} = Stream of {1}", StreamKey, EntryKey)); await ScriptRunner.RunScriptAsync(pmClone, NextCommand); } if (Access == FileAccess.ReadWrite || Access == FileAccess.Write) { return(CoreScriptCommands.NotifyEntryChangedProfile(ChangeType.Changed, null, EntryKey, ThenCommand)); } else { return(ThenCommand); } }
public static void RunScript(ParameterDic initialParameters, bool cloneParameters, params IScriptCommand[] commands) { if (cloneParameters) { initialParameters = initialParameters.Clone(); } IScriptRunner runner = initialParameters.GetValue <IScriptRunner>("{ScriptRunner}", Instance); runner.Run(new Queue <IScriptCommand>(commands), initialParameters); }
public static Task RunScriptAsync(ParameterDic initialParameters, bool cloneParameters, params IScriptCommand[] commands) { if (cloneParameters) { initialParameters = initialParameters.Clone(); } IScriptRunner runner = initialParameters.GetValue <IScriptRunner>("{ScriptRunner}", Instance); return(runner.RunAsync(new Queue <IScriptCommand>(commands), initialParameters)); }
public override async Task <IScriptCommand> ExecuteAsync(ParameterDic pm) { switch (Mode) { case RunMode.Parallel: await Task.WhenAll(ScriptCommands.Select(cmd => ScriptRunner.RunScriptAsync(pm.Clone(), cmd))); break; case RunMode.Queue: await ScriptRunner.RunScriptAsync(pm, ScriptCommands) .ConfigureAwait(this.ContinueOnCaptureContext); break; case RunMode.Sequence: foreach (var cmd in ScriptCommands) { await ScriptRunner.RunScriptAsync(pm, cmd) .ConfigureAwait(this.ContinueOnCaptureContext); if (pm.Error != null) { return(ResultCommand.Error(pm.Error)); } } break; default: return(ResultCommand.Error(new NotSupportedException(Mode.ToString()))); } if (pm.Error != null) { return(ResultCommand.Error(pm.Error)); } else { return(NextCommand); } }