是异步 - 等待运行单独的线程吗?

时间:2017-03-07 04:15:16

标签: multithreading xamarin async-await task

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会变慢。

1 个答案:

答案 0 :(得分:3)

来自Task.Run()文档:

  

将指定的工作排队在ThreadPool上运行,并返回该工作的任务或Task<TResult>句柄。

Task.Run()在另一个线程上执行任务。 async不会自动使代码在另一个线程上运行,而是指示编译器转换方法内的各种结构,例如rewriting await statements/expressions