异步/等待未产生异步效果

Ale*_*SFT 4 vb.net async-await

异步/等待无效吗?

我认为label1应该立即执行。

 Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Await Task.Run(Sub()
                           Threading.Thread.Sleep(3000)
                       End Sub)
        Label1.Text = "123"
    End Sub
Run Code Online (Sandbox Code Playgroud)

ACo*_*ton 6

我认为您误解了Async/Await应该如何工作。在您的代码中:

 Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Await Task.Run(Sub()
                       Threading.Thread.Sleep(3000)
                   End Sub)
    Label1.Text = "123"
 End Sub
Run Code Online (Sandbox Code Playgroud)

label1在3秒延迟结束之前不会改变。您的事件处理程序将等待任务,然后继续执行并更改标签。但是Async/Await肯定有效果。

比较您的代码与此:

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    threading.Thread.Sleep(3000)
    Label1.Text = "123"
 End Sub
Run Code Online (Sandbox Code Playgroud)

代码中会发生同样的事情:3秒后,标签将更改。但是,两者之间存在巨大差异。在您的代码Async/await版本中,UI 不会被阻止,这意味着您可以按下另一个按钮,并且那里的代码仍将立即执行。

Await表示正在进行的任务很长,UI线程将不会继续执行,sub直到该任务完成(在另一个线程上)。完成后,UI线程将在其离开的位置拾取并更新标签。