写点什么

预览: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:411781
用户头像

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

关注

评论

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

超实用!2024年10款免费项目管理系统全解析

爱吃小舅的鱼

项目管理 免费

AB Micro850笔记 485串口插件 2080-SERIALISOL

万里无云万里天

自动化 PLC 工厂运维

AB Micro850笔记 热电阻热电偶扩展模块 2085-IRT4

万里无云万里天

自动化 PLC 工厂运维

03MyBatis-Plus中的常用注解

百度搜索:蓝易云

AB Micro850笔记 使用ccw了解扩展与插件信息

万里无云万里天

自动化 PLC 工厂运维

终端仿真软件ZOC8 for Mac

Mac相关知识分享

5.3K Star,轻量级联想拯救者工具箱

GitHub指北

C#

万界星空科技 MES数据的集成平台

万界星空科技

系统集成 mes 万界星空科技mes 生产管理MES系统

AB Micro850笔记 更新固件版本

万里无云万里天

自动化 PLC 工厂运维

AB Micro850笔记 三种编程方式 梯形图 功能块 结构化文本

万里无云万里天

自动化 PLC 工厂运维

8.9K Star,开源自托管离线翻译引擎

GitHub指北

Python

6.1K Star,简简单单的看直播

GitHub指北

dart

跨平台 SQL 编辑器和数据库查询工具RazorSQL for Mac

Mac相关知识分享

网页也能跑大模型?

蛋先生DX

AI 浏览器 webassembly 大模型 onnxruntime-web

localhost与127.0.0.1傻傻分不清楚,区别详解来了

陆通

MES系统如何实现生产车间的实时监控、精准调度

万界星空科技

工业互联网 mes 工业自动化 万界星空科技mes MES、

AB Micro850笔记 CCW F1 查看本地帮助文档

万里无云万里天

自动化 PLC 工厂运维

高效开发Maven架构设计图解/掌握项目工程自动化技巧(精通篇二)

肖哥弹架构

maven 效能

API 数据接口:使用操作流程与安全指南

Noah

AB Micro850笔记 工程应用经验总结

万里无云万里天

自动化 PLC 工厂运维

AB Micro850笔记 上传与下载

万里无云万里天

自动化 PLC 工厂运维

5.8K Star,Microsoft 官方开源电商平台

GitHub指北

C#

linux下vsode超级用户运行

百度搜索:蓝易云

Docker启动失败报错Failed to start Docker Application Container Engine解决方案

百度搜索:蓝易云

MyBatis获取参数值的两种方式#{}和${} 以及 获取参数值的各种情况

百度搜索:蓝易云

AB Micro850笔记 使用ccw详细了解PLC信息

万里无云万里天

自动化 PLC 工厂运维

AB Micro850笔记 ccw中能添加的设备一览

万里无云万里天

自动化 PLC 工厂运维

一种绕过Rust借用检查和不可变性的方法

SkyFire

rust 借用检查

使用终端MobaXterm连接Centos

百度搜索:蓝易云

如何挑选适合的项目可视化管理系统?十大优选方案揭晓

爱吃小舅的鱼

项目管理 可视化

AB Micro850笔记 使用ccw粗略了解PLC信息

万里无云万里天

自动化 PLC 工厂运维

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