AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

预览:Visual Basic 与 C#中的异步语法

  • 2010-11-01
  • 本文字数:1400 字

    阅读完需:约 5 分钟

在最近的博客文章中,Visual Basic 团队发布了一条简单的消息,声称在 Visual Basic 和 C#中将会增加异步编程语法。两种语言新增的 Async 和 Await 关键字的实现将基于.NET 4.0 中的任务并行库(Task Parallel Library,TPL)。

Async 关键字用于方法,它将启用方法的异步行为。在这个方法中,Await 关键字将暂停当前的执行流程,直到当前异步行为结束为止。线程不会因此而暂停,它可以用于处理其他工作,例如 UI 事件。一旦异步行为结束后,方法的将继续执行余下部分。

以下是一个典型的 WPF 或 WinForm 应用程序中的“搜索”功能:

复制代码
Private Sub SearchButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles SearchButton.Click
ProgressBar1.Visibility = Visible
SearchButton.IsEnabled = False
Dim dt As DataTable = Nothing
Dim worker As New BackgroundWorker
AddHandler worker.DoWork, Sub()
PrepareSearch()
worker.ReportProgress(50)
dt = SearchDatabase()
End Sub
AddHandler worker.RunWorkerCompleted, Sub()
ResultsGrid.DataContext = dt
ProgressBar1.Visibility = Visible
SearchButton.IsEnabled = True
End Sub
AddHandler worker.ProgressChanged,
Function(a As Object, b As ProgressChangedEventArgs) _
ProgressBar1.Value = b.ProgressPercentage
worker.RunWorkerAsync()
End Sub

根据博文所写,Async VB 的版本大约如下所示:

复制代码
Private Async Sub SearchButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles SearchButton.Click
ProgressBar1.Visibility = Visible
SearchButton.IsEnabled = False
Await PrepareSearch()
ProgressBar1.Value = 50
ResultsGrid.DataContext = Await SearchDatabaseAsync()
ProgressBar1.Visibility = Visible
SearchButton.IsEnabled = True
End Sub

据称,C#和 VB 都会享有相同的设计、关键字及单元测试。因此 C#版本看上去应该是这样的:

复制代码
private async void SearchButton_Click(object sender, RoutedEventArgs e) {
ProgressBar1.Visibility = Visibility.Visible;
SearchButton.IsEnabled = false;
await PrepareSearchAsync();
ProgressBar1.Value = 50;
ResultsGrid.DataContext = await SearchDatabaseAsync();
ProgressBar1.Visibility = Visibility.Visible;
SearchButton.IsEnabled = true;
}

在这些示例中,Async 版本会返回一个 Task 对象。Await 关键字后面的代码会形成一个回调函数,在 Task 完毕后执行。这里您可能想到 CCR 类库使用 C#的“yield return”来创建 continuation 的做法。这不是巧合,事实上“await”重用了许多“yield return”代码。于是,VB 团队也趁此机会,终于完成了它们的迭代器功能。

我们相信在 PDC 中将会听到这方面更多信息。

查看英文原文: Sneak Peak: Asynchronous Syntax for Visual Basic and C#

译者注:PDC 微软最高级的专业技术人员会议。前几天在 PDC 2010 会议上,Anders Hejlsberg 发表了一场名为“C#与 Visual Basic 的未来”的演说,谈论了未来 C#和 VB 中最为重要的两个特性:“异步(Async)”及“编译器即服务(Compiler as a Service)”。国内社区的老赵对这场演讲进行了详细的总结,目前已经完成了关于异步编程的部分。

2010-11-01 03:411946
用户头像

发布了 157 篇内容, 共 57.7 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

熟悉Android打包编译的流程,超硬核

android 程序员 移动开发

玩转Android事件分发机制,kotlinnative内存管理

android 程序员 移动开发

百度阿里腾讯头条面试Android高级岗必问!Handler源码解析!

android 程序员 移动开发

深入浅出,Andorid 端屏幕采集技术实践,附大厂真题面经

android 程序员 移动开发

炸裂!万字长文拿下HTTP 我在鹅厂等你!(1),html5移动开发框架

android 程序员 移动开发

热修复设计之热修复原理(三),kotlin后端框架

android 程序员 移动开发

深入探索 Android 内存优化(炼狱级别-上),安卓消息分发机制

android 程序员 移动开发

滴滴DoKit Android核心原理揭秘之函数耗时,android组件化

android 程序员 移动开发

疫情结束后,会影响程序员年后找工作吗?,安卓开发面试题自定义view

android 程序员 移动开发

王者荣耀MVP-不不不,一个小例子彻底搞懂Android的-MVP到底是什么

android 程序员 移动开发

疫情下中年IT的焦虑,轻松拿下offer

android 程序员 移动开发

由浅入深理解Android虚拟机—内存模型,垃圾回收机制是如何实现的

android 程序员 移动开发

疫情下,每个职场人都要思考这4点,有了这些中高端面试专题-大厂还会远吗

android 程序员 移动开发

看完此文,你对Gradle的理解又升级了!,万字总结

android 程序员 移动开发

深入理解 RecyclerView 的绘制流程和滑动原理,android应用开发教程答案

android 程序员 移动开发

炸裂!万字长文拿下HTTP 我在鹅厂等你!,入职阿里啦

android 程序员 移动开发

深入解析Android的StateListDrawable,【工作感悟】

android 程序员 移动开发

疫情让“灵活用工”浮出水面,一线互联网公司面经总结

android 程序员 移动开发

深入浅出,Andorid 端屏幕采集技术实践(1),android面试题整理最新

android 程序员 移动开发

深入理解Flutter动画原理,安卓framework

android 程序员 移动开发

用最通俗简单的方式,带你全面理解Android事件传递机制,有一句废话你砍我

android 程序员 移动开发

疫情之下,这真是一份完美的程序员宅家指南,androidsdk开发实例

android 程序员 移动开发

深入浅出:MVVM+ViewBinding,互联网寒冬公司倒闭后

android 程序员 移动开发

独立开发者为什么,不需要运营也能月薪几万,甚至几十万?

android 程序员 移动开发

热修复——Tinker的集成与使用,android系统工程师面试题

android 程序员 移动开发

疫情过后打算跳槽阿里,本以为凉了没想到居然是它“救,2021年Android大厂面试分享

android 程序员 移动开发

深入探索 Android 网络优化(二、网络优化基础篇,移动开发框架

android 程序员 移动开发

深入探索编译插桩技术(三、解密 JVM 字节码,都是精髓

android 程序员 移动开发

百万级日活 App 的屏幕录制功能是如何实现的,flutter小程序的onshow

android 程序员 移动开发

温故知新:深入理解Android插件化技术,Android高级插件化强化实战

android 程序员 移动开发

疫情下,中年IT的焦虑,Android面试总结

android 程序员 移动开发

预览:Visual Basic与C#中的异步语法_.NET_Jonathan Allen_InfoQ精选文章