写点什么

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

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

关注

评论

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

深耕零售行业数字化,乐檬软件与华为云携手共进

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

大数据实时链路备战——数据双流高保真压测 | 京东云技术团队

京东科技开发者

大数据 压测 企业号 7 月 PK 榜 双流 数据双流

GitHub上有哪些好项目?GeaFlow图计算快速上手之SSSP算法

TuGraphAnalytics

图算法 图论 GeaFlow tugraph 单源最短路径

FTP文件传输工具:简单、高效、实用的数据传输方式

镭速

快速文件传输 FTP文件传输工具

2023 年 10 大前端发展趋势

互联网工科生

前端 发展趋势

频繁FullGC的原因竟然是“开源代码”? | 京东云技术团队

京东科技开发者

JVM GC 企业号 7 月 PK 榜 Full GC

【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(备份+恢复篇)

洛神灬殇

MySQL 数据恢复 数据备份 技术分析

AI新场景 安全新边界技术高峰会定档8月9日

权说安全

云环境与服务器的四大区别简单聊聊

行云管家

云计算 云服务器 云环境

antv-x6使用及总结 | 京东物流技术团队

京东科技开发者

数据可视化 可视化开发 企业号 7 月 PK 榜 antv-x6

改变人力资源业务战略,释放变革性技术力量

智达方通

全面预算管理 企业人力资源 智达方通EPM系统

大型企业采购云管平台的需求是什么?选择哪家厂商好?

行云管家

云计算 企业上云 云管平台

拆解雪花算法生成规则 | 京东物流技术团队

京东科技开发者

算法 雪花算法 企业号 7 月 PK 榜

AI驱动税务智能,开启智慧税务新纪元

用友BIP

AI 税务管理

中企出海,数智人力构建全球化组织的驱动力!

用友BIP

中企出海 数智人力

IPQ5018|WIFI6|DR5018 vs DR5018M what's the difference?

wallyslilly

ipq5018

一文带你全面了解openGemini

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

AIIA杭州大会|李京梅:基于孟子GPT生成式大模型的技术与行业应用实践

澜舟孟子开源社区

提升直播软件源码开发平台性能关键利器功能_山东布谷科技创作

山东布谷科技

源码 软件 软件开发 直播 源码搭建

货拉拉基于 Flink 计算引擎的应用与优化实践

Apache Flink

大数据 flink 实时计算

Hybrid App 技术解析:热更新的原理

Onegun

混合应用开发 native 热更新 Hybrid

iOS MachineLearning 系列(21)——CoreML模型的更多训练模板

珲少

告别传统人肉运维,实现360°可观测!奇点云数据存算引擎DataKun R2.0发布

Geek_2d6073

粗粮细作,铁合金行业的节能降耗

用友BIP

冶金

Ubuntu 18.04系统编译安装Docker教程。

百度搜索:蓝易云

Docker 云计算 Linux ubuntu 运维

【专业 TypeScript 实战】15 个高级技巧,开创卓越开发之路!

汽车之家客户端前端团队

Ubuntu 18.04系统编译安装Tomcat教程。

百度搜索:蓝易云

云计算 tomcat Linux ubuntu 运维

在Java中的空指针异常怎么避免?

java易二三

指针 java‘ #编程

图技术在 LLM 下的应用:知识图谱驱动的大语言模型 Llama Index

NebulaGraph

图数据库 知识图谱 LLM

你还在用命令式编程?Python函数式编程让你的代码更优雅!

高端章鱼哥

Python 函数式编程

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