我想通过使用静态成员访问器从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 =

10-05 20:38