QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

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

关注

评论

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

第十一周作业

Jack

现成花火交易所系统软件APP开发案例

系统开发

「架构师训练营 4 期」 第一周 - 1001

凯迪

架构师训练营知识点整理

garlic

架构师训练营第 1 期

我从 HX 辞职了

看山

辞职 闲聊

工具之书:坚韧

lidaobing

文学少女 28天写作

《从C ++开始》第9版(1200页)

计算机与AI

c++

SSH 免密码/免用户名/免IP登录云服务器实践

穿甲兵

SSH 服务器

2021健康快乐

escray

2021

(无聊预警)来啊一起冲浪啊 - 网络协议01

Max Zhang - 张亦弛

网络协议 基础知识 OSI七层协议

Python+Selenium——自动办公美梦的破碎与重建

小匚

Python 自动化 办公

架构师训练营—大作业(二)

Geek_shu1988

「架构师训练营 4 期」 第一周 - 001002

凯迪

牛笔了!难道Android真的凉了?Android面试题及解析

欢喜学安卓

android 程序员 面试 移动开发

真香系列!大牛耗时一年最佳总结,让你的app体验更丝滑!建议收藏

欢喜学安卓

android 程序员 面试 移动开发

前端组件化基础知识

三钻

大前端 组件化

LeetCode题解:347. 前 K 个高频元素,二叉堆,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

零基础工程师绘图指南,半小时水平越级提升!

穿甲兵

架构 设计 软件工程 分层架构

区块链与物联网融合理论架构

CECBC

区块链

AEM公链APP系统开发|AEM公链软件开发

系统开发

Hadoop 编程实战:HDFS API 编程样例

罗小龙

Java hadoop hdfs 编程

关于食堂就餐卡系统设计

Geek_mewu4t

系统设计 食堂就餐卡

DeFi中的关键——智能合约 | 白话区块链入门220

CECBC

区块链

2020年Python文章盘点,我选出了个人TOP10

Python猫

Python 学习 编程 技术

2020中国低代码平台市场发展年度报告(深度分析)

J2PaaS低代码平台

软件 低代码 开发工具 SaaS/IaaS/PaaS 软件开发、

极客大学架构师训练营 - 架构师技术图谱 - 大作业二

好吃不贵

架构师训练营第 1 期

高德地图、百度地图 都不如“人的智慧”

小匚

Python 深度思考 产品 日常思考

Caddy服务器使用方法

Rayan

运维 https 服务器 SSL证书

区块链2020年终盘点

CECBC

区块链

深入浅出Android!2021京东最新Android面试真题解析,震撼来袭免费下载!

欢喜学安卓

android 程序员 面试 移动开发

IPFS矿机软件系统开发|IPFS矿机APP开发

系统开发

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