写点什么

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

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

关注

评论

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

Zebec的“Web3.0 TechHive Summit 2022 大会”圆满落幕,回顾与展望

股市老人

无代码的未来

俞凡

无代码

Github星标80k的阿里大牛强推JDK源码笔记,6到飞起

程序知音

Java 源码 jdk 后端技术

从各行业的实际运用中,窥见华为云虚拟专用网络VPN的强大性能

清欢科技

【web 开发基础】PHP8中对数组操作的新变化(56)

迷彩

List 数组 字符串 PHP基础 PHP8

运维训练营第十课作业

好吃不贵

8年java技术岗面试官总结:2022超强面试大全,抓住2022的小尾巴

钟奕礼

程序员 Java 面试 Java、 java 编程

华为云弹性负载均衡ELB,如何保障服务器不瘫痪?

爱科技的水月

如何实现线上线下良好互通?华为云CC支持一点接入多点通达

爱科技的水月

什么是WebSocket

穿过生命散发芬芳

websocket 12月月更

华为云智能云接入ICA,助力企业轻松上云

与时俱进的时代

5分钟搞懂BFF

俞凡

架构 BFF

2022年度盘点|聚焦运维服务,云智慧的高光时刻

云智慧AIOps社区

运维 AIOPS 智能运维 云智慧 智能运维AIOps

5分钟搞懂Web3架构

俞凡

架构 web3

【kubernetes入门到精通】Kubernetes的健康监测机制以及常见ExitCode问题分析「探索篇」

洛神灬殇

Kubernetes 云原生 服务监控 12月月更

BAT大厂java程序员面试必问:JVM+Spring+分布式+tomcat+MyBatis

钟奕礼

程序员 Java 面试 Java、 java 编程

回顾与展望Zebec举办的“Web3.0 TechHive Summit 2022 大会”

BlockChain先知

史上最全JVM大全详解!java程序员细节到极致的一次,魔鬼

钟奕礼

程序员 Java 面试 Java、 java 编程

安全可靠,弹性灵活--华为虚拟专用网络VPN

清欢科技

公共网络安全,还得看华为云虚拟专用网络VPN

清欢科技

笑对过往、活在当下、期盼未来

阿Q说代码

程序员 flag 年度总结

华为云连接CC服务助企业联通全球

爱科技的水月

更加灵活、稳定,华为云虚拟专用网络VPN双活网关优势明显!

清欢科技

阿里高工珍藏版“亿级高并发系统设计手册(全彩版)”面面俱到,太全了!

架构师之道

Java 编程 高并发

Kafka的灵魂伴侣Logi-KafkaManger(2)之kafka针对Topic粒度的配额管理(限流)

石臻臻的杂货铺

kafka 后端

华为云智能云接入ICA,企业数据上云的信赖之选

与时俱进的时代

华为云弹性负载均衡服务,如何助企业应付流量压力

爱科技的水月

GitHub屠榜第一的微服务架构深度解析,简直太硬核了

小小怪下士

Java 程序员 微服务

华为虚拟专用网络VPN,为何备受游戏厂商喜爱?

清欢科技

华为云VPN,经典跟专业版企业应该怎么选?

清欢科技

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