首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在powershell中获取.Net对象异步方法的结果

在powershell中获取.Net对象异步方法的结果
EN

Stack Overflow用户
提问于 2014-09-15 23:34:11
回答 3查看 10K关注 0票数 16

我尝试在Powershell中实例化的.Net对象上调用异步方法:

代码语言:javascript
代码运行次数:0
运行
复制
Add-Type -Path 'my.dll'

$myobj = new-object mynamespace.MyObj()

$res = $myobj.MyAsyncMethod("arg").Result

Write-Host "Result : " $res

在执行脚本时,尽管检查返回值表明它是正确的类型(Task<T>),但shell似乎不等待MyAsyncMethod().Result,也不显示任何内容。其他各种尝试,如中间变量、Wait()等,都没有结果。

我在网上找到的大多数东西都是关于从C#异步调用Powershell脚本的。我想反其道而行之,但似乎没有人有兴趣这样做。这是可能的吗?如果不可能,为什么?

EN

回答 3

Stack Overflow用户

发布于 2016-09-01 18:50:45

我知道这是一个非常老的线程,但它可能是你实际上从异步方法中得到了一个错误,但它被吞噬了,因为你正在使用.Result

尝试使用.GetAwaiter().GetResult()而不是.Result,这将导致出现任何异常。

票数 15
EN

Stack Overflow用户

发布于 2017-11-03 20:16:28

对于长时间运行的方法,请使用PSRunspacedDelegate模块,该模块将使您能够异步运行任务:

代码语言:javascript
代码运行次数:0
运行
复制
$task = $myobj.MyAsyncMethod("arg");
$continuation = New-RunspacedDelegate ( [Action[System.Threading.Tasks.Task[object]]] { 
    param($t)

    # do something with $t.Result here
} );

$task.ContinueWith($continuation);

参见documentation on GitHub。(免责声明:我写的)。

票数 4
EN

Stack Overflow用户

发布于 2014-10-19 07:11:54

这对我很有效。

代码语言:javascript
代码运行次数:0
运行
复制
Add-Type -AssemblyName 'System.Net.Http'

$myobj = new-object System.Net.Http.HttpClient

$res = $myobj.GetStringAsync("https://google.com").Result

Write-Host "Result : " $res

也许可以检查一下是否将PowerShell配置为使用.NET 4:

How can I run PowerShell with the .NET 4 runtime?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25851704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档