我想通过使用静态成员访问器从PowerShell调用静态异步C#方法,例如:
PowerShell
function CallMyStaticMethod([parameter(Mandatory=$true)][string]$myParam)
{
...
[MyNamespace.MyClass]::MyStaticMethod($myParam)
...
}
C#
public static async Task MyStaticMethod(string myParam)
{
...
await ...
...
}
由于我的C#方法是异步的,因此我的C#方法是否可以正常运行而无需从PowerShell进行某种“等待”调用?
最佳答案
它可以自行运行,但是如果您要等待它完成,可以使用此功能
$null = [MyNamespace.MyClass]::MyStaticMethod($myParam).GetAwaiter().GetResult()
如果您改用
AggregateException
之类的东西,这将解开将抛出的$task.Result
。但是,这将阻塞直到完成,这将阻止
CTRL + C
正确停止管道。您可以等待它完成,同时仍然遵循管道停止这样的操作 $task = [MyNamespace.MyClass]::MyStaticMethod($myParam)
while (-not $task.AsyncWaitHandle.WaitOne(200)) { }
$null = $task.GetAwaiter().GetResult()
如果async方法实际上返回了某些内容,请删除
$null =