OceaBase开发者大会落地上海!4月20日共同探索数据库前沿趋势!报名戳 了解详情
写点什么

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

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

关注

评论

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

外包程序员的幸福生活

四猿外

设计原则——依赖倒置原则

GalaxyCreater

架构

架构师0期week2-作业

小高

编程的本质

GalaxyCreater

架构

依赖倒置原则理解

Thrine

架构师训练营第二周作业

时来运转

第二周课程学习总结

Geek_a327d3

作业

架构师训练营第二周总结

烟雨濛濛

深入理解JVM垃圾回收机制 - 运行时栈帧的内存变化

SkyeDance

深入理解JVM 运行时栈帧

游戏夜读 | 中国移动游戏简史

game1night

一周信创舆情观察(6.8~6.14)

统小信uos

新基建 信创

RPC实战与核心原理-学习笔记(4)

程序员老王

作业2

annie

极客大学架构师训练营

【总结】框架设计之架构师实现自己架构目标的主要手段

魔曦

极客大学架构师训练营

依赖倒置原则

清风明月

极客大学架构师训练营

Week2学习总结

铁血杰克

极客大学架构师训练营第二周学习总结

竹森先生

设计模式 架构设计 极客大学架构师训练营 面向对象设计原则

第二周作业

王鑫龙

极客大学架构师训练营

架构师训练营第二周命题作业

whiter

极客大学架构师训练营

拼多多市值快 1000 亿美元了

池建强

创业 拼多多

豆瓣9.0,35万读者“搜不到信息”的神秘作者,我们帮你找到了

华章IT

JVM 虚拟机 深入理解JVM Java 25 周年 周志明

架构师训练营-第二课作业-20200617-设计原则???

👑👑merlan

架构设计 软件设计

架构培训 -02 学习总结 架构师实现自己架构的主要手段

刘敏

架构师培训第二周作业

talen

架构师训练营第二周总结

时来运转

架构作业-第2周

铁血杰克

02架构的方法论

ashuai1106

架构设计 极客大学架构师训练营 架构设计原则

极客时间 - 架构师训练营 - week2 - 课堂笔记

毛聪

极客时间 - 架构师训练营 - week2 - 作业

毛聪

架构师 0 期 | 架构师怎样实现架构目标?

刁架构

设计模式 极客大学架构师训练营

架构师训练营第2周作业

在野

极客大学架构师训练营

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