如何将这两种方法(异步和非异步)合二为一?
How to combine these two methods (async and non-async) into one?
如何将这两种方法结合起来并作为一个...
class DataRulesPSScripts
{
PowerShell ps = PowerShell.Create();
public IEnumerable<object> RunScriptBlock( ScriptBlock scriptBlock, Dictionary<string, object> scriptParameters )
{
var vars = scriptParameters.Select( p => new PSVariable( p.Key, p.Value ) ).ToList();
return scriptBlock.InvokeWithContext( null, vars );
}
public async Task<ScriptBlock> CreateScriptBlock( string pSScript )
{
ps.AddScript( pSScript );
var scriptBlock = (await ps.InvokeAsync())[0].BaseObject as ScriptBlock;
return scriptBlock;
}
}
这两个方法在不同的方法中被调用 class 像这样。 'ds' 是 class DataRulesPSScripts
的对象
private async Task<IEnumerable<object>> GenerateValuesFromScript( Dictionary<string, EntityProperty> arg, string pwScript )
{
var pars = new Dictionary<string, object>();
pars.Add( "_", arg );
var scriptBlock = await ds.CreateScriptBlock( pwScript );
var results = ds.RunScriptBlock( scriptBlock, pars ).ToList();
return results;
}
你可以这么写:
public async Task<IEnumerable<object>> CreateAndRunScriptBlock(
string pSScript,
Dictionary<string, object> scriptParameters)
{
ps.AddScript(pSScript);
var scriptBlock = ( await ps.InvokeAsync() )[0].BaseObject as ScriptBlock;
var vars = scriptParameters.Select(p => new PSVariable(p.Key, p.Value)).ToList();
return scriptBlock.InvokeWithContext(null, vars);
}
用法:
return ( await ds.CreateAndRunScriptBlock(pwScript, pars) ).ToList();
选择:
var items = await ds.CreateAndRunScriptBlock(pwScript, pars);
return items.ToList();
也可能方法本身可以直接return一个列表:
public async Task<List<object>> CreateAndRunScriptBlock(
{
...
return scriptBlock.InvokeWithContext(null, vars).ToList();
}
备注
GenerateValuesFromScript
returns a IEnumerable
因此 ToList
在理论上是无用的(在这种方法中)。
如何将这两种方法结合起来并作为一个...
class DataRulesPSScripts
{
PowerShell ps = PowerShell.Create();
public IEnumerable<object> RunScriptBlock( ScriptBlock scriptBlock, Dictionary<string, object> scriptParameters )
{
var vars = scriptParameters.Select( p => new PSVariable( p.Key, p.Value ) ).ToList();
return scriptBlock.InvokeWithContext( null, vars );
}
public async Task<ScriptBlock> CreateScriptBlock( string pSScript )
{
ps.AddScript( pSScript );
var scriptBlock = (await ps.InvokeAsync())[0].BaseObject as ScriptBlock;
return scriptBlock;
}
}
这两个方法在不同的方法中被调用 class 像这样。 'ds' 是 class DataRulesPSScripts
的对象private async Task<IEnumerable<object>> GenerateValuesFromScript( Dictionary<string, EntityProperty> arg, string pwScript )
{
var pars = new Dictionary<string, object>();
pars.Add( "_", arg );
var scriptBlock = await ds.CreateScriptBlock( pwScript );
var results = ds.RunScriptBlock( scriptBlock, pars ).ToList();
return results;
}
你可以这么写:
public async Task<IEnumerable<object>> CreateAndRunScriptBlock(
string pSScript,
Dictionary<string, object> scriptParameters)
{
ps.AddScript(pSScript);
var scriptBlock = ( await ps.InvokeAsync() )[0].BaseObject as ScriptBlock;
var vars = scriptParameters.Select(p => new PSVariable(p.Key, p.Value)).ToList();
return scriptBlock.InvokeWithContext(null, vars);
}
用法:
return ( await ds.CreateAndRunScriptBlock(pwScript, pars) ).ToList();
选择:
var items = await ds.CreateAndRunScriptBlock(pwScript, pars);
return items.ToList();
也可能方法本身可以直接return一个列表:
public async Task<List<object>> CreateAndRunScriptBlock(
{
...
return scriptBlock.InvokeWithContext(null, vars).ToList();
}
备注
GenerateValuesFromScript
returns a IEnumerable
因此 ToList
在理论上是无用的(在这种方法中)。