我有这种奇怪的观察,这对我来说没什么意义。
请检查以下简单的powershell脚本:
function f($x)
{
Write-Host "Opening $x in the GUI" -ForegroundColor yellow
cmd /c start devenv $x
return $true
}
f "C:\Dayforce\SharpTop\DataSvc.sln"
f "C:\Dayforce\SharpTop\Main.sln"
echo "done"
运行它,立即触发两个devenv实例,脚本几乎立即退出。
现在我稍微修改一下:
function f($x)
{
Write-Host "Opening $x in the GUI" -ForegroundColor yellow
cmd /c start devenv $x
return $true
}
$a = f "C:\Dayforce\SharpTop\DataSvc.sln"
$b = f "C:\Dayforce\SharpTop\Main.sln"
echo "done"
运行它会打开第一个devenv实例,但是,在关闭devenv实例之前,函数f永远不会存在。然后第二个devenv实例被触发,脚本永远不存在,直到我关闭第二个devenv实例。
行为完全不同。从异步中它变得完全同步。
发生了什么事?
答案 0 :(得分:0)
当最后一个命令是外部命令并且结果没有被管道传输时,Powershell管道异步执行。
第一种情况会发生什么。
如果管道或使用结果作为变量赋值,则管道同步执行。
在第二种情况下会发生什么。