在至少PowerShell v4(Server 2012R2)和v5(Win10)上,当访问出现故障的System.Threading.Tasks.Task对象的Result属性时,它似乎返回null,而不是抛出导致它出错的异常。 / p>
$t = new-object System.Threading.Tasks.TaskCompletionSource[int]
$t.SetException((New-Object System.Exception 'a'))
$t.Task.Result # No exception
$t.Task.Result -eq $null # True
当访问Result getter时,等效的C#程序会抛出,正如MSDN所说的那样:
请注意,如果在任务操作期间发生异常,或者任务已被取消,则Result属性不会返回值。相反,尝试访问属性值会引发AggregateException异常。
我无法在互联网上找到有关此行为的任何内容。我做错了什么或者PS对Result属性有什么特殊处理吗?
请注意
$t.Task.Wait() # Does throw the exception
确实会抛出一个AggregateException。
编辑:我现在发现Why don't errors rasied inside Get-SPWeb get propagated to powershell?这是重复的。正如PetSerAl在这个问题的评论和该问题的接受答案中所说的那样,PS会抑制所有getter的异常并返回null。