即刻成为鸿蒙应用开发者,解锁职业发展新机遇!点击了解~ 了解详情
写点什么

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

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

关注

评论

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

架构实战营模块四

WolvesLeader

「架构实战营」

阿里内部神作Java并发原理JDK源码手册让Github沸腾,现已开源

Java 编程 程序员 面试 计算机

报名领奖|云栖大会,10月19-22日杭州不见不散!

阿里巴巴云原生

阿里巴巴 阿里云 云原生 云栖大会

绝绝子!LeetCode官网首发的1137页的数据结构与算法刷题指南

Java 编程 程序员 面试 计算机

北鲲云超算平台有哪些形式为高性能计算用户提供算力服务?

北鲲云

让项目顺利上线:做好转测试与上线准备

石云升

项目管理 管理 引航计划 内容合集 9月日更

【得物技术】MySQL 8.0:新的身份验证插件(caching_sha2_password)

得物技术

MySQL 默认方法 得物技术 身份 身份插件

阿里P8不眠不休,用了两个月整理出这本32W字Java面试手册,在Github上引起震动

Java 编程 程序员 面试 计算机

终于有人把大厂面试必考的动态规划、链表、二叉树、字符串全部整理出来了

Java 架构 面试 算法 后端

DDD领域驱动设计在团队中推广和实施

AiDaddy

智能世界的罗马是怎样建成的?

脑极体

一个Product Owner的假设引发的思考

Bruce Talk

敏捷 随笔 Agile Product Owner

学习心得 - 架构训练营 - 第四课

Fm

Alibaba2021全新Java高并发终极版手册,现已在Github上标星80K

Java 编程 程序员 面试 计算机

Postman 如何调试加密接口?

星安果

Postman

模块8

Geek_35a345

联机数据分析OLAP:Kylin入门

正向成长

kylin

谈谈几种数据库优化方法和依据的指标

Regan Yue

数据库优化 9月日更

什么是产品感?

吴世亮

产品 产品设计 数字化 产品感 sense

说要内推阿里的学长,替我整理好的Java面试题,分享给大家

Java spring 程序员 架构 编程语言

☕【Java技术指南】「JPA编程专题」让你不再对JPA技术中的“持久化型注解”感到陌生了!

码界西柚

Java 注解 jpa 使用技巧 9月日更

阿里第三版「SpringCloudAlibaba笔记」出世,全新技术限时开源

Java 编程 架构 面试 微服务

程序员(媛)不懂汉服?岂能让别人小看,咱先靠肉眼大数据识别万张穿搭照

梦想橡皮擦

9月日更

Dubbo3.0|阿里巴巴服务框架三位一体的选择与实践

阿里巴巴云原生

阿里云 云原生 Dubbo3

Canvas制作转盘和钢琴

空城机

typescript 大前端 canvas 引航计划

有人出15万要买下这份384页JDK源码笔记的版权,但被我果断拒绝,为了大家,我要开源

Java 程序员 架构 面试 计算机

跪了!阿里官方出品Spring Security王者手册,Github获赞70k+

spring 程序员 编程语言

美团一面:为什么选用Hbase,Hbase和MySQL的区别是什么?

Java MySQL 架构 面试 后端

被阿里奉为“座上宾”!2021公认最权威的分布式微服务指导手册

Java 程序员 面试 微服务 计算机

"你的网站加载速度很慢怎么办?"——技术经理在面试中可能遇到的可怕问题

云原生

架构 面试 web技术 职业生涯

学生管理系统架构设计文档

Rabbit

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