Monday, October 29, 2012

[原创] Async Sub 和 Sub 的分别(Metro编程)


简单来说,Async Sub就好像是在 子线程 运行的Sub,比较适合那种需要时间的代码。在Async Sub里,所有的代码都不会等 执行 完了才继续,除非你加上Await在代码的前面。

拿个代码做例子:

Async Sub AsyncTest()
Txtblock1.Text = “现在延时3
Threading.Tasks.Task.Delay(3000) ‘延时3
Txtblock1.Text = “延时完成”
End Sub

当你输入以上代码,你会发现VS2013会给你一个警告:

This async method lacks 'Await' operators and so will run synchronously. Consider using the 'Await' operator to await non-blocking API calls, or 'Await Task.Run(...)' to do CPU-bound work on a background thread.

其实你可以把这个警告看成:要注意哦,你的Async方法里没有Await哦,所有的代码都不会等待的哦。也就是说,你的延时代码也将无效哦~

如果你坚持不信,并编译运行,你会发现,你的 延时代码 真的没有效了,直接出现“延时完成”。

那么,要如何解决呢?很简单,在Threading那行的最前端加个Await就行了~

代码将会变成:

Async Sub AsyncTest()

Txtblock1.Text = “现在延时3

Await Threading.Tasks.Task.Delay(3000) ‘延时3

Txtblock1.Text = “延时完成”

End Sub

再次运行,你会发现你的 延时代码 有效了!而且,不会导致整个程序hang掉!这就是使用Async的好处!

No comments:

Post a Comment

你对此有何看法?