Start-VM "My VM Name" -runAsync
$VM = Get-VM | where { $_.name -eq "My VM Name" }
$timeout = new-timespan -minutes 5
start-sleep -seconds 5
$toolsStatus = ($VM | Get-View).Guest.ToolsStatus
$sw = [diagnostics.stopwatch]::StartNew()
while ($sw.elapsed -lt $timeout) {
if ($toolsStatus -eq 'toolsOK') {
return
}
start-sleep -seconds 5
}
Exit
以上代码将在不降低UI速度的情况下运行。如果我删除Task.Run并将异步放在void BtnPage_Clicked旁边,则UI会变慢。
答案 0 :(得分:3)
来自Task.Run()
文档:
将指定的工作排队在ThreadPool上运行,并返回该工作的任务或
Task<TResult>
句柄。
Task.Run()
在另一个线程上执行任务。 async
不会自动使代码在另一个线程上运行,而是指示编译器转换方法内的各种结构,例如rewriting await
statements/expressions。