异步/等待无效,
我认为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
答案 0 :(得分: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
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
与代码中的情况相同:3秒钟后,标签将更改。但是,两者之间存在巨大差异。在您的代码中,Async/await
版本的用户界面不会阻塞,这意味着您可以按另一个按钮,那里的代码仍将立即执行。
Await
表示正在进行一个长任务,并且UI线程将不会继续执行sub
,直到该任务完成(在另一个线程中)。完成后,UI线程将在其左侧的位置拾取并更新标签。
答案 1 :(得分:3)
似乎如下,并且代码更像是异步的
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim action1 As Action = New Action(Sub()
Threading.Thread.Sleep(3000)
End Sub)
action1.BeginInvoke(Nothing, Nothing)
Label1.Text = "123"
End Sub